STM32的HAL库的HAL_Delay问题和UART接受数据问题
void HAL_IncTick(void)
{
uwTick++;
}
中断函数是1ms进来一次,也就是说uwTick+1就代表1ms
void SysTick_Handler(void)
{
HAL_IncTick();
}
void HAL_Delay(__IO uint32_t Delay)
{
__IO uint32_t timingdelay;
timingdelay = uwTick + Delay;
//while(HAL_GetTick() < timingdelay)
while(uwTick < timingdelay)
{;
}
}
在HAL库里 我就没看到哪里对uwTick溢出进行处理,也就是说uwTick=0xffffffff的时候 再加1就是uwTick=0了那这一时刻的延时不就延时不准确了吗?
在HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)函数里使能的 是 __HAL_UART_ENABLE_IT(huart, UART_IT_TC);传输完成中断这里发送数据不应该是 __HAL_UART_ENABLE_IT(huart, UART_IT_TXE);传输数据寄存器空中断才对
很费解 求解答 你用的是滴答定时器延时,看一下滴答定时器介绍就明白了 巅峰残狼 发表于 2015-1-13 12:57
你用的是滴答定时器延时,看一下滴答定时器介绍就明白了
这里的滴答定时器 只是1ms中断一次 就是说1ms uwTick加1 这并没有把我的问题解决 顶一个!!!!!!!!!!!! uint32_t HAL_GetTick(void)
{
return uwTick;
}
这函数,很多库文件调用,用来timeout 延时
我觉得调用了uint32_t HAL_GetTick(void)函数的延时都是有问题的
不过我算了一下 要连接上电46天多才会出现bug (0xffffffff个ms) 这ST官方库的bug不小
所有文件都涉及到这延时延时的bug 嗯,延时这个确实是个bug 真是bug吗?关注。以后再测。 而且这bug不好改! 太多的地方调用uint32_t HAL_GetTick(void)函数了,,又不能随便给uwTick;清零