识物手电筒(二)

    今天的任务是点亮小灯。

    任何单片机,点亮小灯的实质就是拉高端口电平就行,STM32也不例外,比起51单片机直接输出电平,STM32的IO多了两步,即配置方向和开启时钟,比起AVR和PIC这两种单片机则多了开启时钟这一步。因为STM的外设很多,为了降低功耗,每个外设都对应一个时钟,如果想用外设工作,必须把相应的时钟打开。

    对于51单片机,如果要让IO口输出信息,直接赋值1或0就行,而STM32则比较复杂,需要控制端口输出数据寄存器ODR(Output data register)来实现,ODR是一个32位寄存器,低16位对应着IO0~IO16,高16位保留。只要往相应位置写入0或者1就可以输出低或高电平。

    ODR寄存器的偏移地址是0CH,这个偏移地址是基于端口的起始地址而言的。GPIOB的起始地址为0X40010C00,这样GPIOB_ODR寄存器地址为0X40010C00+0X0C=0X40010C0C,因此我们就可以定义GPIOB_ODR为:

#define GPIOB_ODR *(volatile unsigned long *) 0X40010C0C

    这样,我们就可以直接使用GPIOB_ODR了。但STM32的IO口还要配置方向,这个端口配置寄存器来控制。端口配置寄存器就两个,每4bit控制一个IO口,端口配置低寄存器:CRL控制这IO口的低8位;端口配置高寄存器:CRH控制这IO口的高8bit。在4位一组的控制位中:

CNFy[1:0]用来控制端口的输入输出
MODEy[1:0]用来控制输出模式的速度,即


版权声明:本文为qq_40058642原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。