你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于STM32串口接收任意字符串经验分享

[复制链接]
攻城狮Melo 发布时间:2023-4-16 18:30
cube配置
设置串口波特率和中断

bcad7a07c1c74d6695e66882e007f9c8.png

e8ad4c97489e4408b5ebed8118f30ea5.png


生成工程文件,去hal库的 "stm32l4xx_it"里注释掉串口中断函数(官方有问题,我们自己写!)

84f4f54e8e3a495b914747306025f963.png

usart.h:
usart.h:
  1. /* Define to prevent recursive inclusion -------------------------------------*/
  2. #ifndef __USART_H__
  3. #define __USART_H__

  4. #ifdef __cplusplus
  5. extern "C" {
  6. #endif

  7. /* Includes ------------------------------------------------------------------*/
  8. #include "main.h"

  9. /* USER CODE BEGIN Includes */

  10. /* USER CODE END Includes */

  11. extern UART_HandleTypeDef huart1;

  12. /* USER CODE BEGIN Private defines */
  13.        
  14. extern uint8_t   buff[1024];
  15. extern uint16_t  buff_len;
  16. extern uint8_t   buff_Flag;
  17.        
  18. /* USER CODE END Private defines */

  19. void MX_USART1_UART_Init(void);

  20. /* USER CODE BEGIN Prototypes */
  21. void USART1_IRQHandler(void);
  22. void USART1_IT_Enable(void);
  23. /* USER CODE END Prototypes */

  24. #ifdef __cplusplus
  25. }
  26. #endif

  27. #endif /* __USART_H__ */

  28. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

复制代码

usart.c
usart.c里面添加:
  1. /* USER CODE BEGIN 1 */

  2. uint8_t   buff[1024];
  3. uint16_t  buff_len=0;
  4. uint8_t   buff_Flag=0;
  5. void USART1_IT_Enable(void)
  6. {
  7.   __HAL_UART_ENABLE_IT(&huart1, UART_IT_RXNE);
  8.   __HAL_UART_ENABLE_IT(&huart1, UART_IT_ERR);
  9.   __HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);
  10. }

  11. void USART1_IRQHandler(void)
  12. {
  13.   /* USER CODE BEGIN USART2_IRQn 0 */
  14.   uint8_t Res=0;
  15.   /* USER CODE END USART2_IRQn 0 */
  16.      //HAL_UART_IRQHandler(&huart1);   //注释这条语句,不使用HAL库的回调处理
  17.   /* USER CODE BEGIN USART2_IRQn 1 */
  18.    
  19.     //判读是否为接收中断
  20.     if((__HAL_UART_GET_FLAG(&huart1,UART_FLAG_RXNE)!=RESET))
  21.     {
  22.         HAL_UART_Receive(&huart1,&Res,1,1000);
  23.         buff[buff_len]=Res;
  24.         buff_len++;
  25.     }
  26.     //判读是否为溢出中断
  27.     if((__HAL_UART_GET_FLAG(&huart1,UART_FLAG_ORE)!=RESET))
  28.     {
  29.         __HAL_UART_CLEAR_IT(&huart1,UART_CLEAR_OREF);
  30.     }
  31.     //判读是否为接收空闲中断
  32.     if((__HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE)!=RESET))
  33.     {
  34.         __HAL_UART_CLEAR_IT(&huart1,UART_CLEAR_IDLEF);                //清除中断标志
  35.         buff_Flag=1;        //直到没数据才把标志位至1,主函数才可以判断到
  36.     }               
  37.   /* USER CODE END USART2_IRQn 1 */
  38. }

  39. /* USER CODE END 1 */

  40. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

复制代码

main:
  1. int main(void)
  2. {
  3.   /* USER CODE BEGIN 1 */

  4.   /* USER CODE END 1 */

  5.   /* MCU Configuration--------------------------------------------------------*/

  6.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  7.   HAL_Init();

  8.   /* USER CODE BEGIN Init */

  9.   /* USER CODE END Init */

  10.   /* Configure the system clock */
  11.   SystemClock_Config();

  12.   /* USER CODE BEGIN SysInit */

  13.   /* USER CODE END SysInit */

  14.   /* Initialize all configured peripherals */
  15.   MX_GPIO_Init();
  16.   MX_USART1_UART_Init();
  17.   /* USER CODE BEGIN 2 */
  18. USART1_IT_Enable();  //使能一些中断
  19.   /* USER CODE END 2 */

  20.   /* Infinite loop */
  21.   /* USER CODE BEGIN WHILE */
  22.   while (1)
  23.   {
  24.         if(buff_Flag==1)
  25.     {
  26.       HAL_UART_Transmit(&huart1 ,buff,buff_len,0xffff);
  27.       buff_Flag=0;
  28.       buff_len=0;   
  29.     }
  30.     /* USER CODE END WHILE */

  31.     /* USER CODE BEGIN 3 */
  32.   }
  33.   /* USER CODE END 3 */
  34. }
复制代码


效果

3bb2341a79d04d82904e67e714d8c0fb.png

77104ae25c19490884ac4bdb211a2188.png

————————————————
版权声明:创客协会的阿蛋°
如有侵权请联系删除



收藏 评论0 发布时间:2023-4-16 18:30

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版