金牌会员
 
- 积分
- 1606
- 金钱
- 1606
- 注册时间
- 2014-7-11
- 在线时间
- 279 小时
|
2金钱
如果mian函数里面调的函数里面有return 0,会不会引起单片机复位
如:
int main(void)
{
uint8_t t;
uint8_t len;
uint16_t times = 0;
sys_stm32_clock_init(336, 8, 2, 7); /* 设置时钟,168Mhz */
delay_init(168); /* 延时初始化 */
led_init(); /* 初始化LED */
btim_timx_int_init(10 - 1, 8400 - 1); /* 84 000 000 / 84 00 = 10 000 10Khz的计数频率,计数5K次为500ms */
while (1)
{
delay_ms(1);
t++;
if(t==200)
{
LED1=!LED1;
t=0;
led2flag=1;
return 0;
}
if(led2flag)
{
t2++;
if(t2==200)
{
LED2=!LED2;
t1=0;
led2flag=0;
return 0;
}
}
}
这里执行到LED1翻转的时候就复位了,LED2永远也不会翻转
为什么会复位
|
最佳答案
查看完整内容[请看2#楼]
主函数return并不会导致单片机复位,但是main函数会再次被执行。
/* Call the clock system intitialization function.*/
bl SystemInit
/* Call static constructors */
bl __libc_init_array
/* Call the application's entry point.*/
bl main
bx lr
上面这段是从STM32启动文件的第93行开始,启动文件调用main函数,如果main函数退出就会运行bx lr。这时PC指针又会回到main函数入口再次执行。
|