1、对于嵌入式中直接操作寄存器的操作时,一定要注意的是,在操作寄存器后会直接反映到芯片上,而不是按业务流程流到一定节点后统一处理。例如以下例子:
例如:如下两段代码为实现同样的功能,示例二经测试发现在程序运行中,会发生瞬间采样case 0对应。
示例一:
void sub_sel(uint8_t no)
{
uint32_t temp;
temp=0x1fff;
switch(no)
{
case 0:
temp=0x1fff;
break;
case 1:
temp|=0x8000;//PC[13..15]=1000 xxxx xxxx xxxxb
break;
case 2:
temp|=0x4000;//PC[13..15]=0100 xxxx xxxx xxxxb
break;
default:
break;
}
GPIOC->ODR|=0xe000;
GPIOC->ODR&=temp;
}
示例二:
void sub_sel(uint8_t no)
{
GPIOC->ODR &=0x1fff;
switch(no)
{
case 0:
//GPIOC->ODR &=0x1fff;//PC[13..15]=0000 xxxx xxxx xxxxb
break;
case 1:
GPIOC->ODR |=0x8000;//PC[13..15]=1000 xxxx xxxx xxxxb
break;
case 2:
GPIOC->ODR |=0x4000;//PC[13..15]=0100 xxxx xxxx xxxxb
break;
default:
break;
}
}
2、STM32当外部时钟HSE失效后,系统会自动通过CSS时钟监控系统切换为内部时钟。当你在测试晶振的时候尤其要注意这点。
未完待续。。。。。。