欢迎使用CSDN-markdown编辑器

来源:互联网 发布:软件意向购买书 编辑:程序博客网 时间:2024/06/14 07:07

最近调试了stm32f429IG的串口,建立工程使用了HAL库,不同于使用f1系列时的标准库。HAL库使用了一些新的特性,在调试的时候带来了一些方便也带来了很多困惑。以下做一个HAL库应用到串口上的总结:

HAL库函数
Hal_uart_init(huart) 函数通过usart handle structure参数对串口进行初始化配置,该结构体huart 需要配置串口号、数据结束位、数据位数、有无硬件流控、有无奇偶校验等等配置参数。
在stm32f4xx_usart.c文件中,有该函数的定义,Hal_uart_init(huart)还调用了一个弱函数Hal_uart_mspinit(void)。一般需要对这个函数进行重定义,用来使能串口时钟、使能gpio口时钟、配置gpio口工作模式,并且配置串口中断分组。
类似地,usart_IRQHandler(huart)中断函数也调用了HAl库函数Hal_usart_IRQhandler(huart)函数,Hal_usart_IRQhandler(huart)对串口标志位进行判断,从而确定串口数据传输状态,当发生接收中断或者发送中断时,调用Hal_uart_RXIRQcallback(haurt),Hal_uart_TXIRQcallback(haurt)。同样地,这两个函数也是弱函数,用户可以进行重定义。一般中断操作就在重定义的回调函数里面写就可以了。

HAL库的缺点就在于,它进行了很多层次的调用,如果不仔细研究Hal库函数。用户看不出.c文件中定义的弱函数怎样与其它函数相关联。
它的优点也比较明显,用户的处理一般就是重定义相关弱函数实现相应处理。

另一方面,刚刚接触串口,常常被一些莫名其妙的错误困扰到。在这里也做一个总结,希望能够给刚刚接触的同伴们勘误带来帮助。

使用串口助手调试时注意选择你串口初始化时的波特率,这个一定注意,不然就会出现乱码。这里写图片描述
如上图红圈所示。

你的程序配置的波特率为9600,那么你的串口助手一定也要勾选9600波特率。这样才可能进行正常通信。(我刚开始调试程序的时候忘记了这一点,总显示乱码。然后一味觉得自己代码错误,浪费了不少时间;这里指出来,希望能给像我一样的新手一个勘误的提示。)

0 0
原创粉丝点击