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

【经验分享】STM32串口接收数据

[复制链接]
STMCU小助手 发布时间:2022-1-27 23:03
稍微理一下思路,一个数据从电脑发送到STM32,然后在从STM32返回到电脑显示出来。

1569662-20190906064204631-233725391.png

如上图所示,发送(1所示的路线)前,STM32的淳口需要初始化的设置。包括:波特率,字长,硬件流,停止位,奇偶校验位,模式(接收,发送,接收和发送),串口的基地址(Instance)。在初始化串口的函数里面,需要调用到HAL_UART_MspInit(),这是一个虚函数(_weak),HAL_UART_MspInit()会调用到HAL_GPIO_Init(),把IO口进行配置。(模式,上下拉,速度,复用)

3.接收中断优先级的配置
  1. HAL_NVIC_EnableIRQ(USART1_IRQn);          //接收中断使能         
  2. HAL_NVIC_SetPriority(USART1_IRQn,2,2);    // 中断优先级的配置
复制代码

以上两个函数可以放在HAL_UART_MspInit()里面进行

4.使能串口接收中断
HAL_UART_Receive_IT(&usart1_handler,rdula,1);

这个函数可以写在主函数里面,因为在uart.c的文件中是有的。同时可以写在串口配置函数的后面。

5.编写中断服务函数
  1. /***中断服务函数***/
  2. void USART1_IRQHandler()
  3. {
  4.     HAL_UART_IRQHandler(&usart1_handler);      //中断处理函数   HAL_UART_Receive_IT(&usart1_handler,rdula,1);//使能接收中断。为什么放在这里,因为是处理完中断处理函数,而接受中断关闭,不在处理相关的接收数据,为了能够再次接收数据,可以把接收中断函数放在中断服务函数逇里面。

  5. }
复制代码

6.编写中断回调函数
  1. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
  2. {
  3.     u8 temp;
  4.     if(huart->Instance == USART1)            //判断是不是串口一,要对串口一进行回调函数。
  5.     {
  6.         temp=*((huart->pRxBuffPtr)-1);
  7.         HAL_UART_Transmit(&usart1_handler,&temp,1,1000);
  8.    
  9.     }
  10.    
  11. }
复制代码


上图所示的代码中,void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)是一个虚函数(_weak),所以需要重新定义。其中if是判断这个基地址是不是串口一。


收藏 评论0 发布时间:2022-1-27 23:03

举报

0个回答

所属标签

相似分享

官网相关资源

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