首页 > 编程知识 正文

stm32cube设置,轻松玩转stm32cubemx

时间:2023-05-06 03:53:41 阅读:26999 作者:1428

【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状态。 和中断标志位不一样哦

虽然是很久以前的笔记了,但终于补上了。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。