STM32按鍵輸入、所需要的C語言複習、時鐘系統框圖
第一部分:
STM32按鍵輸入是我的第二個在STM32 平臺上有輸入的小例項。思路為,先查詢硬體圖看清按鍵是低電平有效還是高電平有效,根據我的開發環境得知四個按鍵有三個按鍵是低電平有效,有一個按鍵是高電平有效。然後設計程式碼,設計程式碼之前得分析清楚,按鍵有兩種情況,可持續按鍵和不可持續按鍵。可持續按鍵的意思是,按一下放開後,繼續按還會有用,而不可持續按鍵就不行。
分清按鍵型別就可以照一般運用外設的三步走戰略前進,第一步初始化按鍵輸入時鐘,第二步初始化所運用的IO時鐘,第三步掃描鍵盤
初始化時鐘選擇時鐘系統中的高速匯流排掛載的時鐘,APB2所包含的時鐘函式RCC_APB2PeriphClockCmd()。具體下面的時鐘系統分析會清晰的講述。
接下來呼叫IO初始化函式GPIO_Init();
最後一步用於掃描鍵盤,掃描鍵盤設定了掃描引數,為兩種模式,模式0是不持續按鍵,模式1是持續按鍵,具體掃描引數如下程式碼:
u8 key_scan(u8 mode)
{
static u8 key_up=1;//mode0是不持續按鍵,mode1是持續按鍵
if(mode==1) key_up=1;
if(key_up&&(key0==0||key1==0||key2==0||wk_up==1))
{
delay_ms(30);
key_up=0;
if(key0==0)return key0_pres;//
else if(key1==0) return key1_pres;
else if(key2==0) return key2_pres;
else if(wk_up==1) return wkup_pres;
}
else if(key0==1&&key1==1&&key2==1&&wk_up==0)key_up=1;
return 0;
}
所寫的標頭檔案主要是函式申明和一些所需要的預編譯如下:
#ifndef __Key_Init
#define __Key_Init
#include "sys.h"//包含位帶操作
//採用位帶操作
//#define key0 PEin(4)
//#define key1 PEin(3)
//#define key2 PEin(2)
//#define wk_up PAin(0)
//採用庫函式
#define key0 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4)
#define key1 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3)
#define key2 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)
#define wk_up GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)
#define key0_pres 1//控制led0
#define key1_pres 2//控制led0
#define key2_pres 3//控制跑馬燈
#define wkup_pres 4//控制蜂鳴器
//採用暫存器
void __key_init(void);
u8 key_scan(u8);
#endif
採用暫存器進行操作,主要是操作CRL和ODR暫存器,由於採用的是上拉下拉輸入,而上拉下拉的控制是由ODR暫存器控制
第二部分:
接下來的內容是對STM32 中經常用到的C語言知識的複習回顧,按鍵輸入中用到的不持續按鍵就用到了static變數,讓變數儲存於靜態區,以利於鍵值的保持。
對於STM32中用到比較多的C語言是下述
我認為第三部分是整個STM32中最重要的地方,很多地方把時鐘系統比喻為系統的心臟,我覺得更貼切的是比喻為血液,一個器官有血液流過,才帶來氧用於提供器官所需能量。
時鐘系統原理圖在最下面給出。首先給出時鐘系統的總結如下:
1.STM32 有5個時鐘源:HSI、HSE、LSI、LSE、PLL。
①、HSI是高速內部時鐘,RC振盪器,頻率為8MHz,精度不高。
②、HSE是高速外部時鐘,可接石英/陶瓷諧振器,或者接外部時
鍾源,頻率範圍為4MHz~16MHz。
③、LSI是低速內部時鐘,RC振盪器,頻率為40kHz,提供低功耗時鐘。WDG
④、LSE是低速外部時鐘,接頻率為32.768kHz的石英晶體。RTC
⑤、PLL為鎖相環倍頻輸出,其時鐘輸入源可選擇為HSI/2、HSE或者HSE/2。
倍頻可選擇為2~16倍,但是其輸出頻率最大不得超過72MHz。
2. 系統時鐘SYSCLK可來源於三個時鐘源:
①、HSI振盪器時鐘
②、HSE振盪器時鐘
③、PLL時鐘
3.STM32可以選擇一個時鐘訊號輸出到MCO腳(PA8)上,可以選擇為PLL
輸出的2分頻、HSI、HSE、或者系統時鐘。
4.任何一個外設在使用之前,必須首先使能其相應的時鐘。
下面給出系統比較重要的時鐘:
typedefstruct
{
__IO uint32_tCR; //HSI,HSE,CSS,PLL等的使能和就緒標誌位
__IO uint32_tCFGR; //PLL等的時鐘源選擇,分頻係數設定
__IO uint32_t CIR; //清除/使能 時鐘就緒中斷
__IO uint32_t APB2RSTR; //APB2線上外設復位暫存器
__IO uint32_t APB1RSTR; //APB1線上外設復位暫存器
__IO uint32_tAHBENR; //DMA,SDIO等時鐘使能
__IO uint32_tAPB2ENR; //APB2線上外設時鐘使能
__IO uint32_tAPB1ENR; //APB1線上外設時鐘使能
__IO uint32_t BDCR; //備份域控制暫存器
__IO uint32_t CSR; //控制狀態暫存器
} RCC_TypeDef;
控制上述時鐘的各個狀態就靠暫存器,任何MCU的控制最終都是暫存器的控制。相關文章
- c語言複習C語言
- C語言輸入輸出C語言
- iOS 防止輸入時鍵盤覆蓋掉輸入框iOS
- Win10系統如何啟用輸入法語言欄桌面提示框Win10
- C語言檔案輸入和輸出操作的學習心得(一)C語言
- 快速搭建TC、易語言、按鍵註冊碼系統
- C51-------時鐘程式(C語言編寫的微控制器時鐘)C語言
- C語言程式設計之《從鍵盤輸入資料》C語言程式設計
- 需要輸入框?試試TextInputLayout
- C語言期末複習資料C語言
- STM32系統時鐘RCC(基於HAL庫)
- c語言: 鍵盤輸入一個n個字元的串,然後按字母表順序輸出這n個字元C語言字元
- 直播系統原始碼,Vue 禁止輸入框輸入空格原始碼Vue
- 入門輸出Hello World!——C語言C語言
- C語言清空輸入緩衝區C語言
- 輸入框點選按鈕清除輸入的所有字元的封裝字元封裝
- C語言學習日記(4)——輸出當前時間C語言
- C語言:計算輸入字元的個數C語言字元
- 關於c語言輸入字串的總結C語言字串
- C語言計算輸入字元的個數C語言字元
- go語言快速入門學習時需要注意什麼?Go
- C語言輸入一個數輸出對應的值C語言
- 11 種程式語言的常用按鍵
- Linux的input輸入子系統:裝置驅動之按鍵驅動Linux
- Android輸入框中加入清除按鈕Android
- STM32時鐘系統配置程式原始碼深入分析原始碼
- Linux 按鍵輸入實驗Linux
- 考研:C語言複習筆記 [Hex Note]C語言筆記
- 影片直播系統原始碼,EditText輸入框的使用原始碼
- c語言也能幹大事,讓你的c語言無所不能!!!!C語言
- C#中的輸入框函式C#函式
- stm32開發筆記(三):stm32系列的GPIO基本功能之輸出驅動LED燈、輸入按鍵KEY以及Demo筆記
- STM32時鐘配置
- C語言的本質(24)——C標準庫之輸入與輸出(下)C語言
- C語言 16 系統庫C語言
- 組合語言學習記錄--輸入輸出字串組合語言字串
- C語言判斷輸入小寫字母的個數C語言
- 從入門到掌握 - 系統學習shell語言