当前位置:   article > 正文

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

stm32f103rct6 stm32cubemax 485
  1. 设置串口和时钟.PC12->UART5_TX;  PD2->UART5_RX.

2 开启中断。

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

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

  1. uint8_t aRxBuffer;               //接收中断缓冲
  2. uint8_t Uart1_RxBuff[256];          //接收缓冲
  3. uint8_t Uart1_Rx_Cnt = 0;           //接收缓冲计数
  4. uint8_t   cAlmStr[] = {0xF0,0x00,0x00,0xEE};
  5. uint8_t Uart1_TxBuff[256];          //接收缓冲

第二步:开启接收中断

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

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

  1. while(HAL_UART_GetState(&huart5) == HAL_UART_STATE_BUSY_TX);//检测UART发送结束
  2. HAL_UART_Transmit(&huart5, (uint8_t *)&cAlmStr, sizeof(cAlmStr),0xFFFF);

第四步:弱函数重写:

  1. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
  2. {
  3.   UNUSED(huart);
  4.   if(huart->Instance==UART5)
  5.   {
  6.        if(Uart1_Rx_Cnt >= 255//溢出判断
  7.        {
  8.               Uart1_Rx_Cnt = 0;
  9.               memset(Uart1_RxBuff,0x00,sizeof(Uart1_RxBuff));
  10.               HAL_UART_Transmit(&huart5, (uint8_t *)&cAlmStr, sizeof(cAlmStr),0xFFFF);
  11.        }
  12.        else
  13.        {
  14.               Uart1_RxBuff[Uart1_Rx_Cnt++] = aRxBuffer;   //接收数据转存
  15.               if((Uart1_RxBuff[0] == 0xF0)&&(Uart1_RxBuff[Uart1_Rx_Cnt-1] == 0xEE))//判断开始、结束位
  16.               {
  17. HAL_UART_Transmit(&huart5, (uint8_t *)&Uart1_RxBuff, Uart1_Rx_Cnt,0xFFFF); //将收到的信息发送出去
  18.                      Uart1_Rx_Cnt = 0;
  19.                      memset(Uart1_RxBuff,0x00,sizeof(Uart1_RxBuff)); //清空数组
  20.               }
  21.        }
  22.        HAL_UART_Receive_IT(&huart5, (uint8_t *)&aRxBuffer, 1);   //再开启接收中断
  23.   }
  24. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/219921
推荐阅读
相关标签
  

闽ICP备14008679号