你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 13978|回复: 30

STM32的HAL库的HAL_Delay问题和UART接受数据问题

[复制链接]

5

主题

31

回帖

0

蝴蝶豆

初级会员

最后登录
2019-4-10
发表于 2015-1-12 18:35:50 | 显示全部楼层 |阅读模式

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了  那这一时刻的延时不就延时不准确了吗?



回复

使用道具 举报

5

主题

31

回帖

0

蝴蝶豆

初级会员

最后登录
2019-4-10
 楼主| 发表于 2015-1-13 12:46:09 | 显示全部楼层
在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);  传输数据寄存器空中断才对
很费解 求解答
回复 支持 反对

使用道具 举报

24

主题

514

回帖

6

蝴蝶豆

金牌会员

最后登录
2019-4-8
发表于 2015-1-13 12:57:51 | 显示全部楼层
你用的是滴答定时器延时,看一下滴答定时器介绍就明白了
回复 支持 反对

使用道具 举报

5

主题

31

回帖

0

蝴蝶豆

初级会员

最后登录
2019-4-10
 楼主| 发表于 2015-1-13 14:01:18 | 显示全部楼层
巅峰残狼 发表于 2015-1-13 12:57
你用的是滴答定时器延时,看一下滴答定时器介绍就明白了

这里的滴答定时器 只是1ms中断一次 就是说1ms uwTick加1 这并没有把我的问题解决
回复 支持 反对

使用道具 举报

5

主题

31

回帖

0

蝴蝶豆

初级会员

最后登录
2019-4-10
 楼主| 发表于 2015-1-14 15:03:45 | 显示全部楼层
顶一个!!!!!!!!!!!!
回复 支持 反对

使用道具 举报

5

主题

31

回帖

0

蝴蝶豆

初级会员

最后登录
2019-4-10
 楼主| 发表于 2015-1-29 17:31:21 | 显示全部楼层
uint32_t HAL_GetTick(void)
{
  return uwTick;  
}  
这函数,很多库文件调用,用来timeout 延时
我觉得调用了uint32_t HAL_GetTick(void)函数的延时都是有问题的
不过我算了一下 要连接上电46天多才会出现bug (0xffffffff个ms)
回复 支持 反对

使用道具 举报

5

主题

31

回帖

0

蝴蝶豆

初级会员

最后登录
2019-4-10
 楼主| 发表于 2015-1-29 17:33:57 | 显示全部楼层
这ST官方库的bug  不小
所有文件都涉及到这延时  延时的bug
回复 支持 反对

使用道具 举报

10

主题

447

回帖

0

蝴蝶豆

金牌会员

最后登录
2020-4-28
发表于 2015-1-29 17:42:02 | 显示全部楼层
嗯,延时这个确实是个bug
回复 支持 反对

使用道具 举报

48

主题

609

回帖

0

蝴蝶豆

金牌会员

最后登录
2020-11-3
发表于 2015-1-30 09:33:38 | 显示全部楼层
真是bug吗?关注。以后再测。

二十四节气~大雪

二十四节气~大雪
回复 支持 反对

使用道具 举报

5

主题

31

回帖

0

蝴蝶豆

初级会员

最后登录
2019-4-10
 楼主| 发表于 2015-1-30 10:50:00 | 显示全部楼层
而且这bug不好改! 太多的地方调用uint32_t HAL_GetTick(void)函数了,,又不能随便给uwTick;清零
回复 支持 反对

使用道具 举报

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版