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

【经验分享】STM32Cube HAL USART发送/接收

[复制链接]
STMCU小助手 发布时间:2022-4-7 17:31
实验内容:通过上位机发送数据,MCU接收到以后,发送数据到上位机。

一、原理图

SS)B)`]V[AW2MLFVK~HH7.png

二、 CubeMX配置

Step1. 打开 STM32CubeMX ,点击“ New Project ”,选择芯片型号, STM32F103VETx 。

GV}7QFW(4G_)_JA]}Q[{%0M.png

Step2.选择时钟源,并配置时钟树。选择Crystal/Ceramic Resonator,并配置系统时钟为72M。

8D3TFW(W$OQV0]2N7E76BH5.png
%TJ0{8]X0CL6RHE@JM(CO.png

Step3.配置SYS,我们这里选择的是Serial Wire。(正常情况配置不配置不影响,debug可以使用。但是你不可以把这两个引脚用于其他复用功能,如果用于其他复用功能,debug就不起作用了。)

3{J(_9@)}J@@}989~3`6.png

Step4.配置串口通讯参数

基本参数设置

[7YHF0JBS@PYJ`)LW6$M~TF.png

串口中断配置(我们这里需要用到接收中断)

9_ULGBE(8RAP6A}D0@~GUE4.png

IO口配置(要确认IO口是否与我们实际电路一致,如果不一致需要手动通过搜索栏修改IO口)

UAJH@~R@`@PLFM}A(H]$(FI.png

因为我们这边没有使用到DMA所以不需要去配置。

到这里关于串口参数配置基本已经完成,只需要根据之前文章《STM32Cube HAL:GPIO输入/输出(一)》Step4-Step8,设置相关工程参数和生成代码。

三、添加功能代码

定义全局变量用来存储接收到的数据:

  1. uint8_t rx_data;
复制代码

在主函数中使能接收中断函数:

  1. HAL_UART_Receive_IT(&huart1,&rx_data,1); //使能接收中断,每接收1个字
  2.                                              //节会进入一次回调函数
复制代码

在main.c文件中添加回调函数:

  1. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
  2. {
  3.         HAL_UART_Transmit(&huart1,&rx_data,1,1000);
  4.         HAL_UART_Receive_IT(&huart1,&rx_data,1);//回调函数中需要重新使能中断
  5. }                                         //否则下次无法进入回调函数
复制代码

至此,就可以实现上位机给MCU发送一个字节数据,MCU接收到数据又返回给上位机的实验效果。

本文主要注意的是中断服务函数和回调函数区别。中断服务函数是在接收到数据都会进去一次,而进入回调函数的条件则取决于HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size) 中的Size,当Size=1时,接受到一个字节数据就进入中断函数,然后再进入到回调函数中。



收藏 评论0 发布时间:2022-4-7 17:31

举报

0个回答

所属标签

相似技术帖

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