为了亮灯,首先要去查看原理图。原理图如下:
由原理图知:led1、led2、led3、led4分别对应GPIOC的PC0、PC1、PC2、PC3引脚。(且低电平灯亮)
下面我们来点亮led1(对应PC0),GPIOC的端口输出数据寄存器(ODR)对应的最低位即为PC0,此时应将最低位置0。
GPIOC_ODR的地址为:0x40011000+0x0C(基地址+偏移)=0x4001100C,则将PC0置0的代码:*(unsigned int * ) 0x4001100C &=~(1<<0);
但就这一句代码灯是不会亮的,因为IO口有两种模式(输入和输出),默认是输入模式,所以我们应该配置IO口为输出模式。
要将低四位(四位一组)配置成0001,GPIOC_CRL的地址为0x40011000+0x00(基地址+偏移)=0x40011000,则代码为(unsigned int * ) 0x40011000 |=(1 << (4*0));*
!!!置0:&=~,置1:|=
但是灯还是不会亮哈哈哈,还得打开 GPIOC 端口的时钟。
IOPCEN默认为0,关闭状态,我们需要置1打开。地址为:0x40021000+0x18=0x40021018,代码为(unsigned int * ) 0x40021018 |=(1 << 4);*
到这里就OK咯!!灯就可以照亮你的心了!
#include "stm32f10x.h"
int main(void)
{
//打开 GPIOC 端口的时钟
*(unsigned int * ) 0x40021018 |=(1 << 4);
//配置 IO 口为输出
*(unsigned int * ) 0x40011000 |=(1 << (4*0));
//控制 ODR 寄存器
*(unsigned int * ) 0x4001100C &=~(1<<0);
}
void SystemInit(void)
{
//函数为空,目的是为骗过编译器不报错
}