for里面使用延时函数程序就死了 为什么啊

2019-08-14 04:16发布

volatile u16 i,j;
for(i=0;i<j;i++)
{
  TIM1->CR1 |= TIM_CR1_CEN;
  delay_us(temp1int[2*i]);
  TIM1->CR1 &= (uint16_t)(~((uint16_t)TIM_CR1_CEN));
  delay_us(temp1int[2*i+1]);
}
delay函数使用的原子哥的不采用中断的延时函数


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
15条回答
aiyeba
1楼-- · 2019-08-15 02:43
支离益 发表于 2017-9-1 11:38
不是 我现在TIM1产生pwm脉冲,通过延时配合 tim1使能 不使能来模拟按键遥控

volatile  不要用这个,走路都还不会,还想飞.
原子哥都不用,你都用上了.
aiyeba
2楼-- · 2019-08-15 04:49
 精彩回答 2  元偷偷看……
支离益
3楼-- · 2019-08-15 06:58
aiyeba 发表于 2017-9-1 11:45
volatile  不要用这个,走路都还不会,还想飞.
原子哥都不用,你都用上了.

延时函数就是用的原子哥的非中断延时 u16 i j 我是这样定义的 之前有人说我这个函数死是因为i j定义的问题 后来才改成volatile的形式  最后发现不是i j定义的问题
支离益
4楼-- · 2019-08-15 09:02
void delay_us(u32 nus) {                         u32 tem;                              SysTick->LOAD=nus*fac_us; //时间加载                                    SysTick->VAL=0x00;        //清空计数器         SysTick->CTRL=0x01 ;      //开始倒数                   do         {                 tem=SysTick->CTRL;         }         while(tem&0x01&&!(tem&(1<<16)));//等待时间到达            SysTick->CTRL=0x00;       //关闭计数器         SysTick->VAL =0X00;       //清空计数器          }
支离益
5楼-- · 2019-08-15 09:32
aiyeba 发表于 2017-9-1 11:49
你什么功能  我帮你写个程序

其实我这个是通过记录遥控的高低电平时间 来模拟遥控  delay里面的数据就是捕获的高低电平时间 TIM1产生38khz pwm波 通过延时来开关pwm实验模拟遥控的波形
aiyeba
6楼-- · 2019-08-15 14:36
支离益 发表于 2017-9-1 11:56
其实我这个是通过记录遥控的高低电平时间 来模拟遥控  delay里面的数据就是捕获的高低电平时间 TIM1产生3 ...

,输入捕获那么好用都不用,你还是把基础打牢阿少年.

一周热门 更多>