STM32
登录
直播中
风来吴山
8年用户
1414经验值
擅长:电源/新能源
私信
关注
[问答]
怎样使用STM32CubeMX串口输出调试信息呢
开启该帖子的消息推送
串口
stm32cubemx
时钟
怎样使用
STM32
CubeMX串口输出调试信息呢?
STM32CubeMX串口如何接收不定长的数据呢?
回帖
(1)
张帆
2021-12-8 15:34:51
STM32CubeMX 串口
我们首先讲串口, 这样之后我们可以使用stm32的串口来输出调试信息或给开发板发送信息。这样操作起来也方便很多。
如何配置晶振这些在这里不再赘述,需要知道的看我之前的博客。
我用的是STM32F103ZET6,使用的是串口一, 外部晶振用的是8M, 芯片主频配置的是72M。配上工程配置页与时钟树。
Figure1工程配置页
Figure2时钟树
开启串口
我用的都是默认配置,大家可以配置成其他选项试试看。
如果要使用接收中断的话, 记得打开串口中断。
串口发送
只需要在主函数上写两行代码就完成了串口发送函数(其实一行就可以了,多了一行是延时函数,如果少了这一行串口就会疯狂的往外发送信息)。
HAL_UART_Transmit这个api是stm32cubemx下的串口发送函数,他就四个输入参数:
1, Huart: 串口句柄, 每一个串口的句柄名称都是有stm32cubemx自己生成, 串口1就是huart1, 串口2就是huart2,以此类推
2, pData: 发送字符缓冲区
3, Size: 发送字符长度
4, Timeout: 等待时间(单位是ms)
Printf重定向
很多人都喜欢使用 printf 函数, 用这个来输出调试信息会方便很多, 只需要在程序的任意位置(当然不能在函数里面加)加上这一段,就可以使用。
串口接收
串口接收可以选择中断或者不中断,选择不中断的话,也是只要两行代码就可以完成串口的发生回调。
HAL_UART_Receive这个api是stm32cubemx下的串口接收函数,他也是四个输入参数:
1. Huart: 串口句柄
2. pData: 接收字符缓冲区
3. Size: 接收字符长度
4. Timeout: 等待时间(单位是ms)
如果使用这个api的话程序就会阻塞在这个函数里面, 然后一直到串口完整接收到你想要的字符串长度或者超过等待时间才会退出这个函数,这样可能满足不了大部分的需求,所以我们基本都是使用串口中断函数,代码如下。
HAL_UART_Receive_IT这个api是stm32cubemx下的串口接收中断注册函数,他是三个输入参数:
1. Huart: 串口句柄
2. pData: 接收字符缓冲区
3. Size: 接收字符长度
HAL_UART_RxCpltCallback这个是api是stm32cubemx下的串口接收中断回调函数, 当串口中断并接收完需要长度的串口信息以后就会调用这个函数, 它只有一个形参:
Huart: 串口句柄
这就引入了一个新的问题:如何接收不定长的数据
我们可以将接收的长度调为1,然后进入中断以后用一个数组将数据一个一个存起来,然后开一个定时器将中断时间定为30ms,每接收到一个数据就重启定时器,如果定时器时间到了就说明串口不再收到数据,将这一段数据当作一帧数据来处理。这个程序比较麻烦,简单的语句解决不了,所以等讲完FreeRTOS的软件定时器,我再教大家这个方法
STM32CubeMX 串口
我们首先讲串口, 这样之后我们可以使用stm32的串口来输出调试信息或给开发板发送信息。这样操作起来也方便很多。
如何配置晶振这些在这里不再赘述,需要知道的看我之前的博客。
我用的是STM32F103ZET6,使用的是串口一, 外部晶振用的是8M, 芯片主频配置的是72M。配上工程配置页与时钟树。
Figure1工程配置页
Figure2时钟树
开启串口
我用的都是默认配置,大家可以配置成其他选项试试看。
如果要使用接收中断的话, 记得打开串口中断。
串口发送
只需要在主函数上写两行代码就完成了串口发送函数(其实一行就可以了,多了一行是延时函数,如果少了这一行串口就会疯狂的往外发送信息)。
HAL_UART_Transmit这个api是stm32cubemx下的串口发送函数,他就四个输入参数:
1, Huart: 串口句柄, 每一个串口的句柄名称都是有stm32cubemx自己生成, 串口1就是huart1, 串口2就是huart2,以此类推
2, pData: 发送字符缓冲区
3, Size: 发送字符长度
4, Timeout: 等待时间(单位是ms)
Printf重定向
很多人都喜欢使用 printf 函数, 用这个来输出调试信息会方便很多, 只需要在程序的任意位置(当然不能在函数里面加)加上这一段,就可以使用。
串口接收
串口接收可以选择中断或者不中断,选择不中断的话,也是只要两行代码就可以完成串口的发生回调。
HAL_UART_Receive这个api是stm32cubemx下的串口接收函数,他也是四个输入参数:
1. Huart: 串口句柄
2. pData: 接收字符缓冲区
3. Size: 接收字符长度
4. Timeout: 等待时间(单位是ms)
如果使用这个api的话程序就会阻塞在这个函数里面, 然后一直到串口完整接收到你想要的字符串长度或者超过等待时间才会退出这个函数,这样可能满足不了大部分的需求,所以我们基本都是使用串口中断函数,代码如下。
HAL_UART_Receive_IT这个api是stm32cubemx下的串口接收中断注册函数,他是三个输入参数:
1. Huart: 串口句柄
2. pData: 接收字符缓冲区
3. Size: 接收字符长度
HAL_UART_RxCpltCallback这个是api是stm32cubemx下的串口接收中断回调函数, 当串口中断并接收完需要长度的串口信息以后就会调用这个函数, 它只有一个形参:
Huart: 串口句柄
这就引入了一个新的问题:如何接收不定长的数据
我们可以将接收的长度调为1,然后进入中断以后用一个数组将数据一个一个存起来,然后开一个定时器将中断时间定为30ms,每接收到一个数据就重启定时器,如果定时器时间到了就说明串口不再收到数据,将这一段数据当作一帧数据来处理。这个程序比较麻烦,简单的语句解决不了,所以等讲完FreeRTOS的软件定时器,我再教大家这个方法
举报
更多回帖
rotate(-90deg);
回复
相关问答
串口
stm32cubemx
时钟
有哪几种方法可以实现
STM32
输出调试
信息
呢
2021-12-02
643
STM32
串口
为什么不能直接使用printf
输出调试
信息
呢
2021-12-02
1862
如何对基于
stm32cubeMX
的
串口
进行设置
呢
2021-11-25
662
怎样
去使用
STM32CubeMX
点亮一个LED
呢
2021-10-25
911
如何使用
STM32CubeMX
去配置一个
串口
呢
2021-12-02
834
怎样
使用
STM32CubeMX
去配置USART
串口
通信
呢
2021-12-10
848
怎么实现
stm32
串口
2来
输出调试
信息
?
2021-12-01
412
怎样
使用
STM32CubeMX
去配置
STM32
串口
呢
2021-12-06
1043
怎样
去安装
stm32cubemx
软件
呢
2021-12-15
1050
请问
怎样
在
STM32CUBEMX
生成的
串口
通讯代码里去实现printf
输出
呢
2021-12-01
392
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分