完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
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的软件定时器,我再教大家这个方法 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1617 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1543 浏览 1 评论
977 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
683 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1595 浏览 2 评论
1863浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
644浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
515浏览 3评论
531浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
504浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 03:48 , Processed in 0.729528 second(s), Total 44, Slave 37 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号