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

做者:湖廣午王  本文由CSDN湖廣午王受權linux

本文出處:https://blog.csdn.net/junzia/article/details/77435725數據庫

轉載請標明出處編程

寫在開頭的話:微信

最近心血來潮,打算從新撿起老本行,結果發現不少都忘記了。乾脆從新開始學習,並作個從零開始的筆記了。網絡

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 OTG


STM32型號的說明:以STM32F103RBT6這個型號的芯片爲例,該型號的組成爲7個部分,其命名規則以下:

具體信息可查閱網站https://www.stmcu.com.cn/。

RTT操做系統

官網的簡介:

RT-Thread是一款來自中國的開源嵌入式實時操做系統,由國內一些專業開發人員從2006年開始開發、維護,除了相似FreeRTOS和UCOS的實時操做系統內核外,也包括一系列應用組件和驅動框架,如TCP/IP協議棧,虛擬文件系統,POSIX接口,圖形用戶界面,FreeModbus主從協議棧,CAN框架,動態模塊等,由於系統穩定,功能豐富的特性被普遍用於新能源,電網,風機等高可靠性行業和設備上,已經被驗證是一款高可靠的實時操做系統。 
RT-Thread實時操做系統遵循GPLv2+許可證,實時操做系統內核及全部開源組件能夠免費在商業產品中使用,不須要公佈應用源碼,沒有任何潛在商業風險。

RT-Thread操做系統源碼風格與linux一致,在官方提供的源碼中,包含有諸多芯片的工程示例,LPC系列和STM32F系列的不少。再者RT-Thread代碼開源,又有那麼詳細的資料,若是遇到官方bsp下沒有的芯片,對於動手能力強的同窗,本身動手移植也比較方便。並且官方提供了詳細的中文文檔,對於英語不太好的同窗簡直就是一個福音。並且,RT-Thread提供了豐富的組件,使用者能夠很是方便的實現諸如GUI、網絡協議棧、Modbus甚至是SQLite數據庫等功能。後續使用的時候再細細體會它的強大之處了。

寫寄存器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接低電平。 




1.沙龍

  • 深圳站:除了精彩的主題,此次的workshop內容是BLE:藍牙如何實時切換傳輸速度(基於RT-Thread和NRF52840),板卡類型爲Nordic官方板NRF52840

    報名請長按如下二維碼識別


2. 在微信後臺回覆「代碼調試」 便可獲取「如何使用vscode+qemu調試RT-Thread 文檔資料」


你能夠添加微信13924608367爲好友,註明:公司+姓名,拉進 RT-Thread 官方微信交流羣

RT-Thread


讓物聯網終端的開發變得簡單、快速,芯片的價值獲得最大化發揮。GPLv2+協議,可免費在商業產品中使用。

長按二維碼,關注咱們


👇點擊進入開發者社區

本文分享自微信公衆號 - RTThread物聯網操做系統(RTThread)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索