完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
【stm32MXcube+HAL库笔记】HAL库中中断的问题(基于usart)
前段时间做hal库的东西时候遇到的一点小问题,然后仔细研究学习了一下做了一个笔记 1 HAL库中中断的流程 hal库中断流程是比标准库中断要多的。 分为 中断服务程序:和标准库里的一样的,一般放置在it.c文件里 中断通用处理函数:hal库下特有的中断处理函数,用于判断这对这个中断源,是哪个具体的中断引起,比如串口,中断通用处理函数判断是usart1出发中断,但是并不知道是什么中断,可能是发送中断,也可能是接受中断 中断接收函数:hal库特有,由中断通用处理函数引导出来,处理具体的中断信号(比如usart1的发送中断),在完成之后会自动调用中断回调函数 ==中断回调函数: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 以下是杂乱的学习笔记 第九章:串口通讯 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的中断发送模式的一些小的注意 首先这一句直接表明是中断方式通讯发送,表明发送的串口,数据,以及数据长度 上述函数直接在完成时候使能发送寄存器为空中断,一旦发送寄存器为空就会进入中断服务函数void USART1_IRQHandler(void) 进入中断服务函数后直接进入hal库的中断通用函数 通用函数的作用用来判断是什么类型的中断,因为usart1发生的所有中断都会进入usart1的中断服务函数,所以这里我们要进行判断再进行下一步的操作 这里首先如果发送寄存器为空 则进入发送数据 如果发送移位寄存器为空,则结束发送 这个函数是用于发送数据 发送完成的数据又要已经入中断服务函数 18、 这个地方搞死我了,原因在于发送寄存器发送需要时间,而直接继续发送会导致发送不出去下面需要的命令。所以需要添加延迟 19、 这里使用的printf函数输出打印,发现如果要输出字符和%d输出asc2码是不一样的,同时后面应该要加变量而不是地址,所以不需要对RxBuffer加取地址符号,而是应该*RxBuffer才对 20、编写的usart-led 这里需要注意的是,对于usart需要设置一个数组去存储接收到的数据,然后再进行判断,用完之后要记得对该数组进行清空,有命令memset();l 21、之前所说的需要一个延迟让发送完成 这里有一个点是hal_busy和tx_rxbuzy是不一样的,具体原因我还没看等下 但是要学会这个while循环和清空临时数组的操作 22、关于上一个问题的解释: 我们发现:当进入接受回调函数之后,状态就是准备状态 然后 HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, 1); //再开启接收中断 之后就会改变状态为接受正忙,然后我们此时还要发送数据的话,就会导致发送和接受状态一起工作处于buzy状态 这和中断标志位是不太一样的哦 很久很久前的笔记,终于补上了。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试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 06:15 , Processed in 0.632143 second(s), Total 49, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号