今天是學校stm32的第二天,昨天對整個板子,以及stm32構架有一個大致的了解,今天在解決按鍵的時候,就輕松多了。
廢話不多說,直接進入主題:
SW5 ? PE14
SW4 ? PE15
SW3 ? PB10
SW2 ? PB11
這是我按鍵對應的管腳【由于我的板子是學長給的,出了板子之外其他的什么都木有,木辦法,所有引腳的連接都是用萬用表測出來的,費了好大的事,呵呵,廢話了】
### 一、按鍵管腳的配置【下面是簡易圖】

配置程序:
~~~
int sw5_config()
{
GPIO_TypeDef *sw5 = GPIOE;
RCC->APB2ENR |= 1<<6;
sw5->CRH &= ~(0xf<<(4*6));//Clear PE14 Register
sw5->CRH |= 8<<(4*6); //Set PE14 Register [TO:pull up / down]
sw5->ODR |= GPIO_Pin_14; //Enable PIN14
return 0;
}
~~~
GPIO_TypeDef 這個結構體在stm32f10x.h里面,于是方便了我們的使用;
GPIO_TypeDef *sw5 = GPIOE;這樣更方便我們對程序的識別
RCC->APB2ENR |= 1<<6;是選中GPIOE,具體看下面的datasheet

其他的注釋都說的很清楚;
### 二、主程序的實現
~~~
int main()
{
GPIO_TypeDef *led = GPIOE;
sys_init(9);
/*Config LED*/
RCC->APB2ENR |= 1<<6;
led->CRL &= 0xFFFFFFF0;
led->CRL |= 0x3 << 0;
led->ODR |= GPIO_Pin_0;
led->BRR |= GPIO_Pin_0; // LED ON
delay_ms(1000);
led->BSRR |= GPIO_Pin_0; // LED??OFF
sw5_config();
while(1)
{
if(!(GPIOE->IDR & GPIO_Pin_14))
{
delay_ms(20);
if(!(GPIOE->IDR & GPIO_Pin_14))
{
led->BRR |= GPIO_Pin_0; //LED ON
}
}
else
{
led->BSRR |= GPIO_Pin_0; //LED OFF
}
}
}
~~~
sys_init()函數昨天已經介紹過了,但是今天發現了一些不足,有重新進行了一下修改
~~~
int sys_init(unsigned char PLL)
{
unsigned char temp = 0;
RCC->CR |= 1<<16; //OPEN HSE
while(!(RCC->CR>>17));
RCC->CFGR = 0x04<<8; //APB1 HSE/2
PLL -= 2; //9-2 = 0111b
RCC->CFGR |= PLL << 18; //0111 ==> X9
RCC->CFGR |= 1 << 16; //PREDIV1 ouput as source of PLL
FLASH->ACR |= 0x32; //With
RCC->CR |= 1<<24; //enable PLL [24bit]
while(!(RCC->CR >> 25));
RCC->CFGR |= 0x2<<0;//PLL As System Clock
while(temp != 0x02)
{
temp = RCC->CFGR >> 2;
temp &= 0x03;
}
return 0;
}
~~~
!(GPIOE->IDR & GPIO_Pin_14)這里是獲取14引腳的狀態,主要看看IDR寄存器

這樣大家就不難理解了吧?
注意:
我在看好多示例程序的時候,發現那些開發者經常犯一個危險的錯誤,這里我先說我的代碼寫法
led->BRR |= GPIO_Pin_0;//LED ON
這里在處理寄存器的時候用了“|=”,就是為了防止影響別的寄存器內容
可能大家都知道,但是經常不注意
OK,今天就先到這里
- 前言
- 【菜鳥入門】stm32的第一個程序--LED
- 【菜鳥入門】stm32 之 掃描按鍵
- 【菜鳥入門】stm32 之 中斷按鍵
- 【菜鳥入門】stm32 之 USART
- 【菜鳥入門】stm32 之 iic
- 【菜鳥入門】stm32 之 eeprom
- 【菜鳥入門】stm32 之 pwm
- 【菜鳥入門】stm32 之 ADC 模數轉換
- 【菜鳥入門】stm32 之 實時時鐘
- 【菜鳥入門】stm32 之 DMA
- 【菜鳥入門】stm32 之 DAC
- 【STM庫應用】stm32 之 USART
- 中斷源去抖辦法
- stm32 啟動代碼應用技巧
- 【STM庫應用】stm32 之 IIC應用
- 【STM庫應用】stm32 之 中斷按鍵初始化(注意事項)
- 關于結構體初始化
- 【STM庫應用】stm32 之 TIM (詳解一 通用定時器)
- 【STM庫應用】stm32 之 TIM (詳解二 脈沖寬度、周期測量)
- 【stm32庫應用】SD驅動移植(基于SDIO外設)
- SD卡fat文件系統移植
- stm32 DMA初始化選項研究
- stm32 靈活靜態存儲控制器(FSMC)(NORFLASH\PSRAM)
- 【stm32+uC/OS-II】ucosii移植簡單詳細步驟
- STM32 加入調試信息來調試代碼
- NRF24L01 無線通信模塊使用