在學完了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詳細配置看另一篇文章)
