#include "stm32f10x.h"
int main(void)
{
*(unsigned int *)0x40021018 |=((1)<<3);//打开时钟GPIOB
*(unsigned int *)0x40010C00 |=((1)<<0); //设置GPIO为输出模式
*(unsigned int *)0x40010C0C =1;//控制ODR寄存器
}
点灯失败,是初始化的问题,debug发现寄存器本身有个复位值,需要事先清零
#include "stm32f10x.h"
int main(void)
{
*(unsigned int *)0x40021018=1;
*(unsigned int *)0x40010C00=0x00;
*(unsigned int *)0x40021018 |=((1)<<3);//打开时钟GPIOB
*(unsigned int *)0x40010C00 |=((1)<<0); //设置GPIO为输出模式
*(unsigned int *)0x40010C0C =1;//控制ODR寄存器
}
但是发现依然不起作用,debug发现初始化时寄存器的值并没有被清零
原因是时钟没有开启,无法先配置CRL,注:在配置CRL的时候,如果配置0001,只开启了PB0的输出,如果需要多个端口还需注意。
将清零语句放在时钟开启之后,问题解决