STM32CubeMX环境下利用STM32F103RCT6 单片机的UART5口实现RS232串口通信。

这篇博客详细介绍了如何在STM32上配置串口和时钟,使用中断进行数据接收和发送。首先,通过PC12和PD2引脚设置UART5的TX和RX,然后开启中断接收。在主函数中定义了接收和发送缓冲区,并在接收中断回调函数中实现了数据的处理和发送。整个过程包括开启接收中断、在while循环中检查发送状态、重写弱函数以处理接收到的数据并再次开启接收中断。
摘要由CSDN通过智能技术生成
  1. 设置串口和时钟.PC12->UART5_TX;  PD2->UART5_RX.

2 开启中断。

3. 生成progject,在Keil 5中打开,添加相应代码。

第一步:main函数中全局变量:


uint8_t aRxBuffer;               //接收中断缓冲

uint8_t Uart1_RxBuff[256];          //接收缓冲

uint8_t Uart1_Rx_Cnt = 0;           //接收缓冲计数

uint8_t   cAlmStr[] = {0xF0,0x00,0x00,0xEE};

uint8_t Uart1_TxBuff[256];          //接收缓冲

第二步:开启接收中断

HAL_UART_Receive_IT(&huart5, (uint8_t *)&aRxBuffer, 1);

第三步:While 循环中查询发送:

while(HAL_UART_GetState(&huart5) == HAL_UART_STATE_BUSY_TX);//检测UART发送结束

HAL_UART_Transmit(&huart5, (uint8_t *)&cAlmStr, sizeof(cAlmStr),0xFFFF);

第四步:弱函数重写:

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)

{

  UNUSED(huart);

  if(huart->Instance==UART5)

  {



       if(Uart1_Rx_Cnt >= 255)  //溢出判断

       {

              Uart1_Rx_Cnt = 0;

              memset(Uart1_RxBuff,0x00,sizeof(Uart1_RxBuff));

              HAL_UART_Transmit(&huart5, (uint8_t *)&cAlmStr, sizeof(cAlmStr),0xFFFF);

       }

       else

       {

              Uart1_RxBuff[Uart1_Rx_Cnt++] = aRxBuffer;   //接收数据转存

              if((Uart1_RxBuff[0] == 0xF0)&&(Uart1_RxBuff[Uart1_Rx_Cnt-1] == 0xEE))//判断开始、结束位

              {

HAL_UART_Transmit(&huart5, (uint8_t *)&Uart1_RxBuff, Uart1_Rx_Cnt,0xFFFF); //将收到的信息发送出去

                     Uart1_Rx_Cnt = 0;

                     memset(Uart1_RxBuff,0x00,sizeof(Uart1_RxBuff)); //清空数组

              }

       }

       HAL_UART_Receive_IT(&huart5, (uint8_t *)&aRxBuffer, 1);   //再开启接收中断

  }

}

  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值