当前位置: 首页 > article >正文

关于正点原子STM32F404探索者V3ZGT6 RS232串口的使用

看了正点原子的官方示例教程和网上很少有资料详细介绍,写一份详细点的介绍

RS232接口定义

RS232分公头(针)和母头(孔)

公头引脚定义

① ② ③ ④ ⑤

 ⑥ ⑦ ⑧ ⑨

母头引脚定义

⑤ ④ ③ ② ①

 ⑨ ⑧ ⑦ ⑥

对应到这块开发板上是公头(COM3),母头(COM2)

需要注意开发板中的USART2和USART3这两处地方的跳线需要根据需求选择,需要连接COM2和COM3的时候需要把对应的串口输入/出与COM2/3连接

程序代码

参照其他串口示例中,我们将对应GPIO口定义成宏,以COM2为示例


/**
 * @brief       RS232初始化函数
 *   @note      该函数主要是初始化串口
 * @param       baudrate: 波特率, 根据自己需要设置波特率值
 * @retval      无
 */
void rs232_init(uint32_t baudrate) {
  /* IO 及 时钟配置 */
  RS232_RE_GPIO_CLK_ENABLE(); /* 使能 RS232_RE 脚时钟 */
  RS232_TX_GPIO_CLK_ENABLE(); /* 使能 串口TX脚 时钟 */
  RS232_RX_GPIO_CLK_ENABLE(); /* 使能 串口RX脚 时钟 */
  RS232_UX_CLK_ENABLE();      /* 使能 串口 时钟 */

  GPIO_InitTypeDef gpio_initure;
  gpio_initure.Pin = RS232_TX_GPIO_PIN;
  gpio_initure.Mode = GPIO_MODE_AF_PP;
  gpio_initure.Pull = GPIO_PULLUP;
  gpio_initure.Speed = GPIO_SPEED_FREQ_HIGH;
  gpio_initure.Alternate = GPIO_AF7_USART3;         /* 复用为串口3 */
  HAL_GPIO_Init(RS232_TX_GPIO_PORT, &gpio_initure); /* 串口TX 脚 模式设置 */

  gpio_initure.Pin = RS232_RX_GPIO_PIN;
  HAL_GPIO_Init(RS232_RX_GPIO_PORT,
                &gpio_initure); /* 串口RX 脚 必须设置成输入模式 */

  gpio_initure.Pin = RS232_RE_GPIO_PIN;
  gpio_initure.Mode = GPIO_MODE_OUTPUT_PP;
  gpio_initure.Pull = GPIO_PULLUP;
  gpio_initure.Speed = GPIO_SPEED_FREQ_HIGH;
  HAL_GPIO_Init(RS232_RE_GPIO_PORT, &gpio_initure); /* RS232_RE 脚 模式设置 */

  /* USART 初始化设置 */
  g_rs232_handler.Instance = RS232_UX;      /* 选择232对应的串口 */
  g_rs232_handler.Init.BaudRate = baudrate; /* 波特率 */
  g_rs232_handler.Init.WordLength = UART_WORDLENGTH_9B; /* 字长为8位数据格式 */
  g_rs232_handler.Init.StopBits = UART_STOPBITS_1;      /* 一个停止位 */
  g_rs232_handler.Init.Parity = UART_PARITY_EVEN;       /* 偶校验位 */
  g_rs232_handler.Init.HwFlowCtl = UART_HWCONTROL_NONE; /* 无硬件流控 */
  g_rs232_handler.Init.Mode = UART_MODE_TX_RX;          /* 收发模式 */
  g_rs232_handler.Init.OverSampling = UART_OVERSAMPLING_16; /*  */
  HAL_UART_Init(&g_rs232_handler); /* 使能对应的串口, 但会调用MSp */
  __HAL_UART_DISABLE_IT(&g_rs232_handler, UART_IT_TC);

#if RS232_EN_RX /* 如果使能了接收 */
                /* 使能接收中断 */
  __HAL_UART_ENABLE_IT(&g_rs232_handler, UART_IT_RXNE); /* 开启接收中断 */
  HAL_NVIC_EnableIRQ(RS232_UX_IRQn);                    /* 使能USART1中断 */
  HAL_NVIC_SetPriority(RS232_UX_IRQn, 3, 3); /* 抢占优先级3,子优先级3 */
#endif

  RS232_RE(0); /* 默认为接收模式 */
}

废话不多说,做了一个COM2与COM3消息相互转发的demo

Demo在附件


http://www.kler.cn/a/419899.html

相关文章:

  • 【北京迅为】iTOP-4412全能版使用手册-第三十二章 网络通信-TCP套字节
  • Linux 网卡收包流程如下
  • Java - JSR223规范解读_在JVM上实现多语言支持
  • HTML 快速上手
  • JS querySelector方法的优点
  • MFC工控项目实例三十五读取数据库数据
  • navicat连接mysql 8.0以上版本2059错误
  • Gazebo插件相机传感器(可订阅/camera/image_raw话题)
  • OpenCV_Code_LOG
  • IT监控:Perseus采集平台的介绍
  • Java 并发基础之 Java NIO 详解
  • openssl哈希算法
  • 【Spring Security框架解析】
  • 【C++】set的使用
  • [高阶数据结构六]最短路径算法
  • 2024年11月28日Github流行趋势
  • 40分钟学 Go 语言高并发:GC原理与优化
  • 驾驭 Spring Data JPA:高效数据库操作的实践指南
  • Ubutuns服务器搭建与维护
  • Resrful控制器
  • win10系统安装docker-desktop
  • 利用Ubuntu批量下载modis图像(New)
  • 【算法分析】FlashAttention算法演进分析
  • 华为欧拉操作系统认证
  • 17 go语言(golang) - 错误处理
  • 【实战】Oracle基础之控制文件内容的5种查询方法