完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
HAL库的超时机制,好像都是采用循环判断的方式(如下面代码中的红色部分),这对于低功耗控制和程序的时序控制太不利了,如果超时比较长,
且该段代码在高优先级的任务中执行,则低优先级的任务在这段超时时间内也无法得到执行。此外,超时单位是1ms一个tick(默认用SYSTICK定时器产生),这个可以修改吗? static HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_t Flag, FlagStatus Status, uint32_t Tickstart, uint32_t Timeout) { /* Wait until flag is set */ while((__HAL_UART_GET_FLAG(huart, Flag) ? SET : RESET) == Status) { /* Check for the Timeout */ if(Timeout != HAL_MAX_DELAY) { if((Timeout == 0U)||((HAL_GetTick() - Tickstart ) > Timeout)) { /* Disable TXE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts for the interrupt process */ CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE | USART_CR1_TXEIE)); CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); huart->gState = HAL_UART_STATE_READY; huart->RxState = HAL_UART_STATE_READY; /* Process Unlocked */ __HAL_UNLOCK(huart); return HAL_TIMEOUT; } } } return HAL_OK; } |
|
相关推荐
8个回答
|
|
楼主想改到什么级别?理论是可以改掉的,ms级别我感觉已经满足需求了吧。
|
|
|
|
本帖最后由 MrJiu 于 2017-5-12 09:22 编辑
超时的时间自己可以控制的啊,不是在调用函数的时候,有一个超时参数的调入么???还有,这个超时指的是你允许这段代码执行最大时间。。。。如果有高优先级的打断了,你就把这个超时参数设置大一点呗!!!!这就是一个估计值!!!这个和低功耗啥的没啥关系吧??? |
|
|
|
要做低功耗,最好用LL库,而不是HAL库。
|
|
|
|
再说了,你可以优化它的,HAL只是最通用的代码,绝对不是最优化的代码。
|
|
|
|
jfuwre 发表于 2019-1-30 12:46 怎么和功耗没关系呢?这段时间内,CPU就在空转呀,本来可以进入低功耗模式的,但现在要等超时时间到。超时时间是自己可以控制,但有些地方本来就要求有足够长的超时时间,不能随随便便改短啊。 |
|
|
|
testd001xx 发表于 2019-1-30 13:24 超时哪有等待??你把超时搞错了吧???超时指的的是:比如你设定10ms,但是由于一些原因,超过了10ms,就会打断,直接跳出来,但是如果设定完了,那就直接退出,又不会说非要等待到10ms,这个过程CPU哪里空转了!!!! |
|
|
|
jfuwre 发表于 2019-1-30 13:41 我贴出的代码的那个while(1)循环就是CPU在空转啊,如果它是在高优先级的任务中执行,这段时间内低优先级任务是无法得到执行的。 |
|
|
|
你这里的while(1)判断的是状态,和超时一点关系都没有,if((Timeout == 0U)||((HAL_GetTick() - Tickstart ) > Timeout))这个才是判断超时的!!!!状态采用的查询方式,肯定要等寄存器的状态执行完了才能结束!!! |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
238 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
734 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1128 浏览 1 评论
LL库F030进行3个串口收发,2个串口为232,一个为485,长时间后,会出现串口1停止运行,另外两个正常,只有重启复原
1600 浏览 1 评论
538 浏览 0 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-8 22:30 , Processed in 0.559379 second(s), Total 56, Slave 49 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号