OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2651|回复: 4

systick延时问题

[复制链接]

15

主题

59

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1400
金钱
1400
注册时间
2016-6-2
在线时间
166 小时
发表于 2016-9-9 14:47:54 | 显示全部楼层 |阅读模式
1金钱
void delayms(volatile u16 x)//延时x毫秒函数
{
    delay1ms=x;
    while(delay1ms);
}
void SysTick_Init(void)//1ms中断
{
   SysTick_Config(SystemCoreClock / 1000);
}
SysTick_Handler(void)//中断服务函数
{
    if(delay1ms)
        {
          delay1ms--;//自减
        }
}

我用串口接收数据,
if(USART_RX_STA)
{
    delayms(50);//接收到数据延时50ms等待接收完成
    if(RData[1]==0x50)。。。。还有接下来的代码我就没贴了
50ms延时进入自减了,但是到0之后还是一直停在 while(delay1ms)这个位置不会跳出去,导致上面判断if(RData[1]==0x50)也就无法执行了,程序卡在延时那不动了。
请问这是什么原因,百思不得其解。。。

最佳答案

查看完整内容[请看2#楼]

中断函数里面最好不要用这个systick中断延时, 我也遇到过这个问题。 换另外个方式吧。 因为systick中断 有个死循环。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

108

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1136
金钱
1136
注册时间
2013-7-16
在线时间
80 小时
发表于 2016-9-9 14:47:55 | 显示全部楼层
hyarcher25 发表于 2016-9-9 15:26
我用的串口中断接收,
void USART1_IRQHandler(void)
{

中断函数里面最好不要用这个systick中断延时, 我也遇到过这个问题。   换另外个方式吧。
因为systick中断 有个死循环。
回复

使用道具 举报

9

主题

108

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1136
金钱
1136
注册时间
2013-7-16
在线时间
80 小时
发表于 2016-9-9 15:11:07 | 显示全部楼层
50 ms 的时间太长了吧。 while(delay1ms) 这个还没到,第二个数据就来了。 死在这了。  
回复

使用道具 举报

15

主题

59

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1400
金钱
1400
注册时间
2016-6-2
在线时间
166 小时
 楼主| 发表于 2016-9-9 15:26:01 | 显示全部楼层
cookles 发表于 2016-9-9 15:11
50 ms 的时间太长了吧。 while(delay1ms) 这个还没到,第二个数据就来了。 死在这了。

我用的串口中断接收,
void USART1_IRQHandler(void)
{
        u8 Res;

        if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
                {
                  Res =USART_ReceiveData(USART1);//(USART1->DR)
                  RData[USART_RX_STA]=Res ;        
                        USART_RX_STA++;
                        USART_ClearITPendingBit(USART1,USART_IT_RXNE);
                }                  
}
每次接收32个字节。
主程序这边在systic中自减延时,一边串口在中断接收数据。相当于用50ms接收这些字节。
难道systick中断和串口中断不能同时存在么
回复

使用道具 举报

15

主题

59

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1400
金钱
1400
注册时间
2016-6-2
在线时间
166 小时
 楼主| 发表于 2016-9-9 15:47:54 | 显示全部楼层
cookles 发表于 2016-9-9 15:40
中断函数里面最好不要用这个systick中断延时, 我也遇到过这个问题。   换另外个方式吧。
因为systick ...

好的。谢谢你

那systick中断死循环是什么啊?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-25 14:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表