STM32学习之智能灯的实现 (STM32F103C8)

  在学完了STM32F4的芯片后,尝试着独立开发一个智能灯小项目,大概功能就是:KEY2按键长按实现开关机,短按切换模式,分别为自动模式和手动模式,自动模式下会根据光照强度改变灯的亮度,手动模式用KEY1来改变灯的亮度,分为6档,按下KEY1逐渐变亮,第六次关闭。开关机蜂鸣器会发出提示音。使用的是STM32F103C8这款芯片。

在开发之前要搭建环境,STM32F103的芯片因为FLASH的大小不同分为了不同型号,不同型号所需的启动文件也不同

startup_stm32f10x_cl.s                  ------------  互联型的STM32F105xx,STM32F107xx

startup_stm32f10x_hd.s                -------------大容量的STM32F101xx,STM32F102xx,STM32F103xx
startup_stm32f10x_hd_vl.s           -------------大容量的STM32F100xx
startup_stm32f10x_ld.s                --------------小容量的STM32F101xx,STM32F102xx,STM32F103xx
startup_stm32f10x_ld_vl.s           ---------------小容量的STM32F100xx
startup_stm32f10x_md.s              ---------------中容量的STM32F101xx,STM32F102xx,STM32F103xx
startup_stm32f10x_md_vl.s         ----------------中容量的STM32F100xx
startup_stm32f10x_xl.s                ----------------超大容量FLASH在512K到1024K字节的STM32F101xx,STM32F102xx,STM32F103xx

一、GPIO的配置

按照之前的配置步骤:

1.看原理图确定引脚    ----原理图

 

LED0,PB3

2.看通用功能是否是IO的功能  -----数据手册

 通用功能是作为JTDO(调试功能)使用的,如果我们要将PB3作为通用IO口的功能,需要重映射,把IO口的功能映射到PB3上。

 

根据图中的内容看出我们需要将AFIO_MAPR这个寄存器的SWJ_CFG这个位配置成相应的功能,而使能这个寄存器又要打开相应的时钟

1、使能AFIO这个功能的时钟

2、配置SWJ_CFG这个位为相应的模式

这个寄存器是在APB2这个时钟上,只需要将第0位置为1就可以使能这个寄存器了,

2、配置AFIOP_MAPR寄存器

 因为在作IO口的功能时还需要用到调试功能,所以在这里将010写入SWJ_CFG这个寄存器就将IO口的功能映射IO口上了

3.配置工作模式

寄存器和STM32F4的有所不同,低寄存器配置的时相应端口的0~7八个管脚,高寄存器控制8~15八个管脚。

每个管脚由四个位控制,PB3作为灯的IO口,应该配置成通用推挽输出模式,在MODE位中写入01,10,11三个值都行,CNF位中写入00,因为CRL和CRH这两个寄存器的复位值位0x44444444所以使用前要将对应位清零,具体操作为

RCC->APB2ENR |= (1<<2);

GPIOB->CRL &=~ (0xf<<12);
GPIOB->CRL |= (3<<12);
GPIOB->ODR |= (1<<3);

然后通过ODR寄存器改变输出的信号就可以控制led灯了。

按键,热释电传感器的配置都是用作输出,只需要改变相应的为就可以了。(关于GPIO详细配置看另一篇文章)

猜你喜欢

转载自www.cnblogs.com/whpl22-Blog/p/11293979.html