先上个代码#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芯片做一样的测试,结果都是一样。奇怪的很 |