博客專欄

        EEPW首頁 > 博客 > STM32F103+RT-Thread從零開始(一)——點亮LED

        STM32F103+RT-Thread從零開始(一)——點亮LED

        發布人:創客物聯網 時間:2019-03-29 來源:工程師 發布文章

        STM32系列MCU


        STM32系列芯片包括F0/F1/F2/F3/F4/F7/L0/L1/L4/H7等系列芯片芯片。不同系列的芯片適用于不同的應用場景。 F0/L0基于ARM Cortex-M0,F1/F2/L1系列基于ARM Cortex-M3,F3/F4/L4系列基于ARM Cortex-M4,F7/H7基于ARM Cortex-M7。L系列表示超低功耗,H表示超高性能(對應就是高功耗了),F就是個折中方案了,性能不錯,功耗也不高。


        其他的先不管,F1系列芯片主要分類如下:


        · 超值型STM32F100 - 24 MHz CPU,具有電機控制和CEC功能· 基本型STM32F101 - 36 MHz CPU,具有高達1MB的Flash· 連接型STM32F102 – 48 MHz CPU具備USB FS device接口· 增強型STM32F103 - 72 MHz CPU,具有高達1MB的Flash、電機控制、USB和CAN· 互聯型STM32F105/107 - 72 MHz CPU,具有以太網MAC、CAN和USB 2.0 OTGSTM32型號的說明:以STM32F103RBT6這個型號的芯片為例,該型號的組成為7個部分。


        寫寄存器Or利用固件庫


        嵌入式的編程,往下說就是操作MCU的寄存器。而固件庫就是函數的集合,固件庫函數的作用是向下負責與寄存器直接打交道,向上提供用戶函數調用的接口(API)。相對于固件庫的方式,直接寫寄存器的代碼更為簡潔,只需要對指定的寄存器進行需要的操作就可以了,但是對于STM32來說,寄存器多達數百個,記起來也是一件非常讓人頭疼的事情。ST推出了官方固件庫,固件庫將這些寄存器底層操作都封裝起來,提供一整套接口,你不需要去知道操作的是哪個寄存器,你只需要知道調用哪些函數即可。 關于寫寄存器還是利用固件庫去開發哪個好,一直都有爭議,只能說存在即為合理,各有各的好處,我個人比較懶,不太喜歡去記那些寄存器都是啥。再者,我也不是專門搞STM32的,要是用寫寄存器的方式開發的話,過一段時間不弄,再回來估計又得花些時間對著文檔看了。所以在后續的博客,我也都會利用固件庫開發。當然,用不用是一回事兒,根據官網技術文檔,操作寄存器的方式是必須要會的。 個人建議,還是需要學會看硬件文檔,看官方的技術資料,而不是遇到問題就百度。學會看官方的技術文檔后,遇到問題解決起來將會事半功倍。


        點亮LED


        點亮LED,首先自然是安裝Keil了。當然,使用其他工具也可以,對于我來說,我還是比較鐘情于Keil。我現在使用的是Keil5,編譯工具鏈為MDK-ARM v5.24。開發板為淘寶上找的便宜的不能再便宜的一塊STM32C8T6開發板,引腳都要自己焊。下載線為ST-Link v2。根據淘寶商提供的硬件資料,這個板子PB12連接了一個LED燈,LED另外一端連接了上拉電阻,即LED在PB12低電平時點亮。


        廢話不說了,Keil的安裝和破解,網上多的是,隨便找個教程,走一走就完了。


        第一步,創建工程


        打開Keil后,首先需要創建個工程。點擊project->New μVision Project。


        填寫工程名


        選擇芯片,如果沒有你要的芯片,就需要到官網上去下載,然后安裝。


        選擇需要用到的功能,Core、Startup和GPIO,可以看到下面有警告,GPIO依賴FrameWork和RCC,也要去勾選上就好了。


        然后確定,工程就創建成功了。


        第二步,增加main.c文件到工程中


        點擊如下按鈕,創建一個新文件,并保存文件到工程目錄中。


        點擊工程管理按鈕,管理工程


        點擊Add Files 把main.c加入到Source Group 1下,Target 1和Source Group 1都可以修改,改成一個合適的名字。


        第三部,編寫main.c 文件


        #include “stm32f10x.h”


        #include “stm32f10x_gpio.h”


        #include “stm32f10x_rcc.h”


        #define CLOCK 72/8


        //時鐘配置,后續再詳細捋時鐘這塊的東西,現在姑且按照這樣設置這者


        void RCC_Configuration(void)


        {


        ErrorStatus HSEStartUpStatus;


        //將RCC寄存器設置為默認值


        RCC_DeInit();


        //打開外部高速時鐘


        RCC_HSEConfig(RCC_HSE_ON);


        //等待外部高速時鐘晶振起振


        HSEStartUpStatus = RCC_WaitForHSEStartUp();


        if(HSEStartUpStatus == SUCCESS){


        //設置PLL時鐘時鐘源及倍頻系數


        RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_16);


        //設置AHB時鐘


        RCC_HCLKConfig(RCC_SYSCLK_Div1);


        //設置APB1低速時鐘


        RCC_PCLK1Config(RCC_HCLK_Div2);


        //設置APB2高速時鐘


        RCC_PCLK2Config(RCC_HCLK_Div1);


        //使能PLL


        RCC_PLLCmd(ENABLE);


        //等待PLL工作


        while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)


        {


        }


        //設置系統時鐘為PLL時鐘


        RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);


        //等待系統時鐘切換為PLL時鐘


        while(RCC_GetSYSCLKSource() != 0x08)


        {


        }


        }


        //打開需要使用的外設的時鐘


        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |


        RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE, ENABLE);


        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);


        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);


        RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);


        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);


        }


        //延時微妙


        void delay_us(unsigned int us)


        {


        u8 n;


        while(us–)for(n=0;n<CLOCK;n++);


        }


        int main(){


        RCC_Configuration();


        //設置GPIOB12 為推挽輸出模式,速度為2MHz


        GPIO_InitTypeDef gpioInit;


        gpioInit.GPIO_Mode=GPIO_Mode_Out_PP;


        gpioInit.GPIO_Pin=GPIO_Pin_12;


        gpioInit.GPIO_Speed=GPIO_Speed_2MHz;


        GPIO_Init(GPIOB,&gpioInit);


        while(1){


        //點亮LED


        GPIO_ResetBits(GPIOB,GPIO_Pin_12);


        //延時500ms


        delay_us(500000);


        //關閉LED


        GPIO_SetBits(GPIOB,GPIO_Pin_12);


        //延時500ms


        delay_us(500000);


        }


        }


        第四步,配置并編譯燒寫程序


        點擊build按鈕,或者rebuild按鈕進行編譯



        編譯成功,Build Output輸出如下:


        無錯誤,然后可以進行程序燒寫,燒寫前需要設置Options for target。我使用的是ST-Link,所以需要選擇ST-Link Debugger。然后點擊后面的Setting按鈕,進行其他設置。


        設置完畢后點擊download按鈕,進行燒寫即可。燒寫時,讓Boot0接低電平。

        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞:

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 沈阳市| 株洲县| 肃宁县| 岳池县| 渝中区| 建德市| 忻州市| 枣阳市| 景东| 正镶白旗| 卢氏县| 紫金县| 和硕县| 台江县| 博白县| 色达县| 新源县| 改则县| 伊宁市| 库尔勒市| 奇台县| 鹤峰县| 从化市| 潜山县| 呼图壁县| 八宿县| 弥渡县| 桃江县| 二连浩特市| 鄄城县| 龙胜| 武夷山市| 三都| 辽中县| 浏阳市| 墨脱县| 巴林右旗| 竹北市| 朔州市| 合山市| 丹棱县|