STM32----摸石头过河系列(一)
在學習stm32之前,我較為熟練的掌握了51單片機的開發,可以運用51中的輸入、輸出,以及定時器、中斷等。今天第一天,學習stm32點亮LED燈。
在本次學習中使用的是stm32f103RC系列單片機,開發工具使用的是Keil5,所使用的開發板原理圖如下:
?
在以后相當一段時間,我都將使用該開發板。
天不早了,開始干活。
在51中想要點亮一個LED直接P1^0= 1就可以了,在stm32中是不會這么簡單的,它涉及到時鐘,庫等等一系列復雜的東西。作為初學者,我們想快點看到效果,快點上手,所以對這些可以先放一放,因此此一系列的學習中,都將使用標準庫來學習。
#include<stm32f10x_rcc.h> #include<stm32f10x_gpio.h>void configure(void) {GPIO_InitTypeDef gpio_struct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOD,ENABLE);gpio_struct.GPIO_Pin = GPIO_Pin_8;gpio_struct.GPIO_Mode = GPIO_Mode_Out_PP;gpio_struct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&gpio_struct);gpio_struct.GPIO_Pin = GPIO_Pin_2;gpio_struct.GPIO_Mode = GPIO_Mode_Out_PP;gpio_struct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOD,&gpio_struct); }void delay(unsigned int x) {while(x--); }int main(void) {configure();while(1){GPIO_SetBits(GPIOA,GPIO_Pin_8);GPIO_SetBits(GPIOD,GPIO_Pin_2);delay(1000000);GPIO_ResetBits(GPIOA,GPIO_Pin_8);GPIO_ResetBits(GPIOD,GPIO_Pin_2);delay(1000000);} }以上即為本次實驗的完整代碼。
#include<stm32f10x_rcc.h> #include<stm32f10x_gpio.h>以上兩行代碼,主要為引入工程所需要的頭文件,頭文件中包含各種宏定義各種庫操作的函數。
void configure(void) {GPIO_InitTypeDef gpio_struct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOD,ENABLE);gpio_struct.GPIO_Pin = GPIO_Pin_8;gpio_struct.GPIO_Mode = GPIO_Mode_Out_PP;gpio_struct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&gpio_struct);gpio_struct.GPIO_Pin = GPIO_Pin_2;gpio_struct.GPIO_Mode = GPIO_Mode_Out_PP;gpio_struct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOD,&gpio_struct); }此段代碼即可看出與51單片機的大大不同,此處為GPIO引腳的配置以及相關時鐘的打開。
首先gpio_struct這個變量是一個結構體,只要用來對GPIO引腳的配置。RCC_APB2PeriphClockCmd函數為庫所提供的函數,主要用來開啟相關的時鐘,RCC_APB2Periph_GPIOA和RCC_APB2Periph_GPIOD分別為GPIOA和GPIOD的時鐘,最后的ENABLE即為使能將兩個時鐘打開。
結構體中的三個變量,GPIO_Pin用來選擇哪個引腳,根據原理圖可以選擇。GPIO_Mode用來設定該引腳的模式,輸入或者輸出,以及何種輸出方式。GPIO_Speed用來設定速度,這個我也不是很懂,但問題不大,照著設就行了。
GPIO_Init該函數用來初始化端口,將設置的引腳,模式,速度應用到相應的引腳。
int main(void) {configure();while(1){GPIO_SetBits(GPIOA,GPIO_Pin_8);GPIO_SetBits(GPIOD,GPIO_Pin_2);delay(1000000);GPIO_ResetBits(GPIOA,GPIO_Pin_8);GPIO_ResetBits(GPIOD,GPIO_Pin_2);delay(1000000);} }期待已久的主函數終于到來。在主函數中將上面配置的函數調用以下,然后所有的操作就都在死循環中了。
GPIO_SetBits(GPIOA,GPIO_Pin_8)該函數將A端口的第8個引腳設置為高電平。
GPIO_ResetBits(GPIOA,GPIO_Pin_8)該函數將A端口的第8個引腳設置為低電平。
然后編譯,下載或者調試,你就可以看到小燈一閃一閃的了。
總結
以上是生活随笔為你收集整理的STM32----摸石头过河系列(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 统计学习方法 第一章 学习笔记
- 下一篇: 第 3 期临床基因组家系分析,助力发表C