电子产业一站式赋能平台

PCB联盟网

搜索
查看: 2392|回复: 0
收起左侧

延时函数不编译怎么回事

[复制链接]

594

主题

958

帖子

5093

积分

四级会员

Rank: 4

积分
5093
发表于 2022-12-30 10:11:12 | 显示全部楼层 |阅读模式
如果我就while(i--)这么编译不出来。
必须在while语句里加一个SysTick->VAL = 0;之类的无意义语句才能编译出来。是怎么回事?


void i2c_delay_us(uint32_t i)
{
     uint32_t temp;
     if(i==0)return;//0.6us
     if(Moni_speed>3)
     {
         temp=2;
         while(temp)
         {
             temp--;
             SysTick->CTRL = 0;//必须加上这句才能生效
             SysTick->VAL = 0;
         };

     }
     else
     {
         if(Moni_speed<=1)SysTick->LOAD = 30 * i;//100k 4.6us
         if(Moni_speed==2)SysTick->LOAD = 9 * i;//200k 2.3us
         if(Moni_speed==3)SysTick->LOAD = i;//300k 1.48us
         SysTick->CTRL = 0X01;
         SysTick->VAL = 0;
         do
         {
             temp = SysTick->CTRL;
         } while ((temp & 0x01) && (!(temp & (1 << 16))));
         SysTick->CTRL = 0;
         SysTick->VAL = 0;
     }

}

延时函数不编译怎么回事-1.jpg



加上两句无意义语句,就能编译出来

延时函数不编译怎么回事-2.jpg
回复

使用道具 举报

发表回复

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

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表