先上个代码- #include "stm8s_conf.h"
- int main( void )
- {
- CLK->CKDIVR &=~((1<<4)|(1<<3));//配置时钟为内部RC,16M
- sim();//关总中断
- GPIOD->DDR |=(1<<2);//PD2为输出
- GPIOD->CR1 |=(1<<2);//推挽
- GPIOD->CR2 |=(1<<2);//输出速率为10M
- GPIOA->DDR |=(1<<3);//PA3为输出
- GPIOA->CR1 |=(1<<3);//推挽
- GPIOA->CR2 |=(1<<3);//输出速率为10M
- GPIOA->ODR |=(1<<3);//PA3为高
- rim();//开总中断
- GPIOD->DDR &=~(1<<2);//PD2为输入
- GPIOD->CR1 |=(1<<2);//上啦
- GPIOD->CR2 &=~(1<<2);//引脚中断失能
- GPIOA->ODR &=~(1<<3);//PA3为低
- while(1)
- {
- }
- }
我用的是stm8f3p6的芯片,发现开中断后不能运行后面的代码,我是用LED检测的,LED(PA3低电平亮)灯不亮。当我注释掉开总中断的时候,LED亮了。继续开中断并注释掉GPIOD->CR2 |=(1<<2);//输出速率为10M,这段代码后LED亮了,此时GPIOD的输出速率为2M。我接着又测试了一下,继续开中断,但将CLK->CKDIVR &=~((1<<4)|(1<<3));//配置时钟为内部RC,16M,这段代码注释掉后,LED也亮了,此时单片机时钟应该是RC,2M。我还在stm8105k6芯片做一样的测试,结果都是一样。奇怪的很
|