【stm32MXcube HAL库笔记】中断HAL库的问题(基于usart )前一段时间做HAL库的东西遇到的一些小问题,还有经过仔细研究学习做了笔记
目录【stm32MXcube HAL库备注】HAL库中断问题(基于usart )1 HAL库中断的过程2中断中的一些特殊之处(usart示例) 3以下是杂乱学习笔记1 HAL库中断的过程
hal库的中断过程远远多于标准库的中断。
分为两部分
中断服务程序:与标准库相同,通常放在it.c文件中
中断通用处理函数:hal库特有的中断处理函数。 用于判断针对该中断源发生了什么样的具体中断。 例如在串行端口中,中断公用处理函数判断为usart1开始了中断,但是不知道是什么样的中断。 是发送中断还是接收中断
http://www.Sina.com/: Hal coot有,由中断公用处理函数导出,处理具体的中断信号(如usart1的发送中断),完成后自动调用中断回调函数
==http://www.Sina.com/:具有Hal库特,用户可以创建。 我个人的理解是,标准库中进入中断服务函数的,都在这个函数中。 具体来说,执行中断触发器后接下来要做什么,不需要清空标志位,用上一个函数清除,填充用户层想做什么就完了。
2中断的特殊之处(以usart为例) 1、每个回调函数添加代码
Hal_Uart_receive_it(HuarT1,(uint8_t * ) aRxBuffer,1 ); 因为为了允许中断,中断接受函数会自动关闭中断启用。
2、接受回调函数后,状态为准备状态,然后
Hal_Uart_receive_it(HuarT1,(uint8_t * ) aRxBuffer,1 ); //如果打开接收中断,则状态会与接收中发生变化,如果要从中发送数据,则发送和接收的状态会一起工作,变为buzy状态。 和中断标志位不一样哦
这个地方还是不舒服。 有两个标志位。 一个是用户手册中的标志位,另一个是hal库定义的标志位
3以下是杂乱的学习笔记第9章。 串行通信
1、串行通信和并行通信
2、串行通信:同步串行和异步串行
3、波特率:每秒传输二进制数字的数量,以bit/s(bps )为单位
4、文字格式:文字中数据的传输格式波特率
5、
6、串行收发单元功能框图:
发送数据寄存器TDR发送移位寄存器TC接收数据寄存器RDR接收移位寄存器
数据寄存器DR
通信状态标志位: TXE TC RXNE
TC为1表示数据已实际发送
7、HAL库外围设备初始化设计思想
8、串行初始化数据类型
Parity :设置奇偶校验
9、外围设备初始化设计思想
周边句柄初始化参数写入寄存器的MCU相关初始化
10,
11、实验:串行重定向
添加头文件stdio.h
HAL_MAX_DALAY超时无限循环等待
12、串行中断方式通信
串行中断通用处理函数
串行端口发送中断回调函数串行端口接受中断回调函数
13,
14,
15,
16、基础任务:固定长度数据收发
17、对USART中断发送模式的一点注意
首先,此语句指示是直接中断方式的通信发送,并指示发送的串行端口、数据和数据长度
上述函数允许在完成时直接在空中断开发送寄存器,当发送寄存器为空时进入中断服务函数voidusart1_IRQHandler(void )
进入中断服务函数后直接进入hal库的中断公共函数
泛型函数的作用用于确定是什么类型的中断。 usart1发生的所有中断都将进入usart1的中断服务函数,现在进行判断并进入下一步
这里,首先如果发送寄存器为空,则进入发送数据
如果发送移位寄存器为空,则结束发送
这个函数是用来发送数据的
发送的数据进入中断服务函数
18,
这个地方杀了我。 这是因为发送寄存器的发送需要时间,如果直接继续发送,则无法发送下一个必要的命令。 所以需要追加延迟
19,
这里使用的printf函数输出打印,但发现输出字符时和%d输出asc2代码不同。 另外,必须在之后添加变量而不是地址。 因此,rx缓冲器不需要加上地址符号,应该加上* rx缓冲器
20、创建的用户指示灯
在此需要注意的是,对于usart,需要在设定存储接收到的数据的数组后再进行判断。 用完后,请记住清空那个数组。 命令memset (); LL
21、如上所述,在发送完成之前需要延迟
这里的一个重点是hal_busy和tx_rxbuzy不同。 具体原因还没有看到
但是,必须学习清空这个while循环和临时数组的操作
22、关于前面问题的说明:
当您开始接受回调函数时,发现状态处于就绪状态
以及Hal_Uart_receive_it(HuarT1,(uint8_t * ) aRxBuffer,1 ); //重新开始接收中断
之后,受理变为忙碌状态,如果我们在这个时候发送数据,发送和受理就会一起工作,进入buzy状态。 和中断标志位不一样哦
虽然是很久以前的笔记了,但终于补上了。