從原理圖PCB到移植RTOS【細說STM32】【一】

2021-02-23 硬體十萬個為什麼

【前言】

iBox相關教材推出以來,不少朋友還希望針對軟體開發進行細緻講解。

為此,我們將陸續針對iBox的STM32的物聯網開發的一些細節,進行分享。

今天是第一章節,我們介紹一下如何移植標準的官網代碼(裸機,無OS)到iBox開發板上,控制LED閃爍。如此簡單的試驗,還是希望給你不一樣的體驗。

【一、安裝編譯工具Keil】

1、為什麼選擇keil

在這個操作之前,原本應該解釋為什麼選擇「Cortex-M」,為什麼選擇「M3」、為什麼選擇「ST」。這樣容易扯遠了。所以簡單說下,原因無非以下幾個維度:

1、成本

2、功耗

3、開發工作量

4、生態

5、易學性、普及度

至於為什麼選擇Keil 沒選擇 IAR、GCC,是因為配置簡單。從支持的晶片的豐富度來說,IAR是不錯的選擇。對於熟練工來說,工具的差異不大;如同硬體熟練工一樣,繪圖工具差異不大。

KEIL 和 IAR Systems都是嵌入式領域系統開發工具和服務商(IDE)的供應商,前者成立於-1986年,總部在德國(如今已被大名鼎鼎的英國ARM公司收購);後者於成立1983年,公司總部位於北歐的瑞典。

二者的最著名的產品分別是 KEIL uVision IDE 和 IAR Embeded Workbench。

估計大部分的開發人員都用過。因為他們都可以很好的支持各種不同版本的MCU。對於不同的開發環境,用久了,便會日久生情。用得順不順手,快不快樂,或喜歡,或討厭等等,都因人而異的。然而我們不能不考慮這個問題:能選擇到最適合自己,更有效率的工具,才是最好的。

KEIL的IDE界面比較通俗易懂,屬於平易近人的那種。

IAR呢,界面簡潔明了,整體感覺——專業。入門不易,一旦入門還是盡在掌握的感覺。

我們選擇的KEIL版本是

2、下載安裝包

連結:https://pan.baidu.com/s/1u955P7trvFYMOAghlj0Y2w 密碼:y4gy

百度網盤自從「360網盤」停用,就開始限速。

所以我們可以使用其他不限速的下載工具進行下載。

將上面的內容存到自己的網盤,然後用下面這個工具進行下載。

pandownload  工具下載地址:

http://pandownload.com/

3、安裝

下載的壓縮包分成三個part,全部下載完成之後解壓縮,文件夾中有五個文件。

先安裝MDK523這個737MB的安裝包,然後安裝MDKCM523的安裝包。

安裝過程沒有注意點,一路NEXT。

安裝完成之後,點擊菜單Project之Manage,選擇Pack Install

Pack Installer窗口打開之後,選擇File菜單之   Import,然後選擇導入剛剛下載的三個PACK後綴名的文件。

4、破解

安裝完成後,只剩下破解了。

破解工具只用於學習交流,不用於商業用途。

http://www.hw100k.com/forum.php?mod=viewthread&tid=3506&extra=

破解統共分7步

1、點擊菜單Flie ->License management   獲取CID

2、CID複製到破解工具中。

3、選擇Target  為ARM

4、點擊Generate按鈕生成序列號

5、複製序列號

6、粘貼到LIC空格中

7點擊ADD LIC

完成破解。

重要,破解時,運行keil,需要用管理員身份運行。

如果你沒有破解,就急急忙忙運行工程,試圖編譯,則給你一個error,提示如下:

Check that your license details are correct in the License Management dialog of MDK. Additional information is available at:

 http://www.keil.com/support/man/docs/license/license_management.htm

至此,安裝破解完成。

安裝好之後,我們就可以拿出我們的開發板硬體iBox了。

【二、下載和使用ST官方原始碼】

我們學習的過程,最好要學習使用官方的源碼。其他開發板的代碼,建議都只作為參考。因為每個人有每個人的編碼習慣,可能一些差異。

不同公司對代碼規範、代碼結構的要求會有不同。

所以,我們從官方代碼作為開始。按照自己公司的要求,和自己能夠理解的習慣進行編碼,在實踐中提升。

總之,對代碼還是要盡在掌握,熟練駕馭、不能囫圇吞棗。

1、MCU

簡單介紹一下我們的 iBox物聯網開發板的硬體系統:

核心晶片是STM32F103ZET6

原理圖pdf下載地址:

http://www.hw100k.com/forum.php?mod=viewthread&tid=3501&extra=page%3D1

2、使用 ST 官網

如果你很熟悉,可以跳過這個章節。但是根據本人觀察,很多長期使用STM32的工程師其實沒有仔細看過官網。

https://www.st.com     進入之後,我們進入Tool&Software去下載STM32標準庫

進入嵌入式軟體頁面之後,可以看到左下角  For STM32 MCUs

提醒:如果你沒有註冊、可以註冊帳號後登陸。下載代碼,需要登陸之後才可以下載。

進入之後,在頁面最下面,有個「Download」。點擊之後,可以下載。

點擊「Download」之後,下載一個壓縮包。

文件名為:en.stsw-stm32054.zip

解壓縮之後,文件夾名稱:STM32F10x_StdPeriph_Lib_V3.5.0

你也可以用下面連結粘貼到瀏覽器,直接下載:

https://www.st.com/content/st_com/en/products/embedded-software/mcus-embedded-software/stm32-embedded-software/stm32-standard-peripheral-libraries.html?querycriteria=productId=LN1939%20

選擇你對應的MCU類別,比如我們iBox選擇F1

現在我們就已經下載下來一個完整的STM32的官方標準外設庫文件包。

我們現在直接進入MDK-ARM文件夾,打開Keil的工程。

文件目錄如下:

STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template\MDK-ARM

雙擊打開。

我們可以嘗試一下編譯(Build)和下載程序(Download)

當我們電機 Download那個圖標時,我們發現下載不了,找不到你的下載工具。

3、使用Jlink進行代碼燒寫

那麼,我們需要做幾個準備工作,才可以進行代碼燒寫:

1、把Jlink連上

2、安裝Jlink

3、配置晶片等燒寫環境

1、看圖

2、首先我們安裝Jlink

下載安裝包,下載地址如下:

http://www.hw100k.com/forum.php?mod=viewthread&tid=3507&extra=

安裝注意事項:無;一路 next

測試一下,我們的工具是否可以連接上我們的MCU

點擊開始菜單:SEGGER-  Jlink-FLASH

打開JLINK軟體,它可能會提示建了工程,隨便建立一個就行

打開配置頁面,點擊Options->Project settings,會進入到配置頁面

配置頁面如下圖所示,下面進行選擇單片機

點擊CPU,選擇STM32單片機

點擊Target     Connect  將JLINK和目標板進行連接。

如果連接成功,說明單片機和Jlink燒寫器都是好的,驅動也安裝成功啦。

然後我們可以嘗試用Keil5裡面的Download試下,應該可以少寫了。

(至於用J-Flash如何燒寫,按下不表)

3、先別急,我們需要配置晶片,讓編譯工具和電腦知道我們電路板上面晶片的型號。

選擇Flash裡面的Configure  Flash Tools

我們需要在Device裡面選擇我們的晶片型號,如下:

選擇Debug  選擇Jlink

選擇Utilities,選擇Jlink

點擊Debug裡面的  右邊的Settings

選擇Debug裡面的Port 修改JTAG為   SW

現在,我們就可以下載啦。

4、修改源碼,實現閃燈

4.1刪除不需要的功能

至此,我們並沒有關心官方的源碼到底寫了什麼內容。

那麼我們看下main函數

這個工程是基於STM32 官方的EVM板,這套代碼為了支持4套開發板,所以做了4組宏定義,選擇。我們在此暫時忽略。

我們將UART、LCD等於我們實驗目的無關的代碼刪除,則,只保留兩段代碼,如下,一段是LEDInit、一段是LEDOn

我們根據函數的定義,可以顧名思議:LEDInit是LED初始化,LEDOn是LED點亮。

4.2 研究 一下LED相關的函數和變量

我們研究一下這STM_EVAL_LEDInit()   LED初始化函數

滑鼠放在這個函數上面,右鍵選擇  跳轉到  「STM_EVAL_LEDInit」

跳轉過去之後,我們可以看到這個就是一個標準的GPIO初始化的函數。

我們去查看一下這幾個數組,是如何定義的。

由此,我們可以看到,在原始代碼裡面定義了四個LED的控制GPIO,分別是:

F6、F7、F8、F9

我們查看一下原理圖,看看iBox上面的控制LED的GPIO分別是哪幾個。

iBox上面一共有四個LED,紅色LED是電源指示燈,不能用GPIO控制。

我們可以看下原理圖:

紅色LED的正極接3V3,負極通過一個電阻接GND。

另外三個顏色的燈分別接到GPIO進行控制。

通過查閱MCU的管腳連接,我們可以看到

PE9控制綠燈

PE10控制黃燈

PE12控制白燈

我們可以修改代碼裡面LED1、LED2、LED3的管腳號,對我們電路板上的LED控制GPIO進行控制。

將上面的LED1的幾個值修改為:

GPIOE   

GPIO_Pin_9 

RCC_APB2Periph_GPIOE

同樣方法,我們修改LED2、LED3

修改完成之後,我們的初始、以及對LED進行控制的代碼,就是我們iBox電路板上面的幾個LED對應的管腳了。

研究完初始化代碼之後,我們研究一下

STM_EVAL_LEDOn函數,我們用右鍵跳轉的方式,查看函數定義。

STM32的每個GPIO埠都有兩個特別的寄存器,GPIOx_BSRR和GPIOx_BRR寄存器,通過這兩個寄存器可以直接對對應的GPIOx埠置'1'或置'0'。

GPIOx_BSRR的高16位中每一位對應埠x的每個位,對高16位中的某位置'1'則埠x的對應位被清'0';寄存器中的位置'0',則對它對應的位不起作用。

GPIOx_BSRR的低16位中每一位也對應埠x的每個位,對低16位中的某位置'1'則它對應的埠位被置'1';寄存器中的位置'0',則對它對應的埠不起作用。

此處,我們先簡單理解:

比如希望快速地對GPIOE的位7進行翻轉,則可以:

GPIOE->BSRR = 0x80; // 置'1'

GPIOE->BRR = 0x80; // 置'0'

庫文件裡面已經對各個管腳進行了二進位的對應位進行了定義。

所以,我們想讓GPIO為低,則運行

GPIO_PORT[Led]->BRR = GPIO_PIN[Led];

如果我們想讓GPIO為高,則運行

GPIO_PORT[Led]->BSRR = GPIO_PIN[Led]; 

按照我們的原理圖,我的GPIO為低時,LED亮、GPIO為高時,LED滅。

所以我們需要修改函數,如下:

編譯,燒錄。我們就可以看到,咱麼iBox上的LED按照我們的預期點亮。

至此,咱們的第一個實驗完成。

後一集,我們要用Keil建立一個全新的工程,然後利用官方庫文件,裁剪掉不需要的內容,做一個屬於自己的第一個工程。

欲知後事如何,且聽下回分解。

相關焦點

  • STM32最小系統板分享
    8月的電子設計大賽,可能用到stm32。
  • mbedtls | 移植mbedtls庫到STM32裸機的兩種方法
    一、mbedtls 開源庫1. mbedtls是什麼Mbed TLS是一個開源、可移植、易於使用、代碼可讀性高的SSL庫。可實現加密原語,X.509證書操作以及SSL / TLS和 DTLS 協議,它的代碼佔用空間小,非常適合用於嵌入式系統。
  • 這樣學習STM32單片機,從菜鳥到牛人很簡單!
    你問,如何系統地入門學習stm32呢?這本身就是一個錯誤的問題。假如你會使用8051 , 會寫C語言,那麼STM32本身並不需要刻意的學習。你要考慮的是, 我可以用STM32實現什麼?為什麼使用STM32而不是8051?是因為51的頻率太低,無法滿足計算需求?是51的管腳太少,無法滿足眾多外設的IO?
  • 【細說STM32】之五——說說串口
    從原理圖PCB到移植RTOS【細說STM32】【三】GPIO在完成GPIO點燈之後,一般我們就希望能夠實現串口列印的功能,便於我們將一些寄存器信息列印出來便於調試。        由於我個人的特殊經歷,對於我來說,串口這東西,仔細寫起來,可以寫一本書!應該不少於200頁。
  • 原理分析--STM32_FLASH模擬實現EEPROM功能
    一、二糖有話說上一篇只寫了如何移植及使用eeprom組件,今天詳細的研究一下該算法如何提高FLASH使用壽命以實現EEPROM的功能,從長遠角度考慮,理解它的原理遠比只是能單調的使用它重要。因為如果你能理解其原理,你就可以將其移植到其他平臺,不只限於ST的晶片,所以要體會它的思路及方法。stm32的FLASH擦除是按整頁或者整扇區擦除的,不同晶片的頁或者扇區(下邊統稱為頁)的大小是不一樣的,有1K,16K,64K,128K等大小。
  • STM32嵌入式開發中的RTOS,你用過哪些?
    收錄於話題 #stm32    FreeRT0S內核同時支持輪換調度算法,系統允許不同的任務使用相同的優先級,在沒有更高優先級任務就緒的情況下,同一優先級的任務共享CPU的使用時間。    FreeRTOS的不足:相對於常見的μC/OS—II作業系統,FreeRTOS作業系統既有優點也存在不足。
  • 關於實時作業系統(RTOS) 的選擇
    自己也可以移植相關的模塊,可能會有幾個切實的問題不好解決:模塊因為不符合 rtos 的設計思想,會對整體的實時性造成損害;也可能因為模塊使用的庫,和 rtos 使用的庫相衝突……內核 RAM、ROM 的佔用量實際上要求 Rtos 高度可裁剪。不是所有內核裁剪到最後都能滿足要求,RTOS 都有個最低的 RAM、ROM 要求,只剩一些最基本的服務。
  • SEGGER的三款RTOS(embOS)有什麼特點?
    說到SEGGER可能有些讀者比較陌生,但說到J-Link相比大家都比較熟悉。是的,J-Link就是SEGGER公司下的一款產品,SEGGER除了我們熟悉的J-Link其實還有很多嵌入式軟體相關的產品,你了解多少?
  • lvgl最新版本在STM32上的移植使用
    期待留言~下面我們一起來看一看LVGL在STM32上的移植使用。lvgl簡介 LittlevGL是一個免費的開源圖形庫,提供了創建嵌入式GUI所需的一切,具有易於使用的圖形元素、漂亮的視覺效果和低內存佔用。
  • RTOS崛起會威脅Linux在嵌入式領域的地位嗎?
    應該會有補充但是替代應該不可能,而且你沒發現很多rtos都是借鑑Linux發明的還有就是這不是一個領域的比較,Linux可以使硬體通用化,這一點完虐單片機,沒有幾個人願意遷移單片機項目代碼Linux開發嵌入式最大的優勢就是資源豐富,這和Linux開源有很大的關係,無數的大牛都在維護和開發
  • STM32 上使用 PWM
    硬體平臺簡介本文基於正點原子 STM32L475 pandora 開發板,給出了 PWM 的具體應用示例代碼,由於 RT-Thread 上層應用 API 的通用性,因此這些代碼不局限於具體的硬體平臺,用戶可以輕鬆將它移植到其它平臺上。
  • STM32單片機開發板硬體原理圖和PCB資料分享
    尊敬的各位小夥伴,經過驗證,STM32單片機開發板的硬體都已經調通,硬體原理圖和PCB可以發布了,今天就把原理圖資料和PCB資料發給大家。
  • 【細說STM32】【九】外部中斷
    一、外部中斷/事件控制器EXTI
  • 【韋東山鴻蒙移植】01移植RTOS需要做的事
    HarmonyOS 鴻蒙韋東山鴻蒙移植01-移植RTOS需要做的事百問網 | 韋東山(點擊查看大圖)鴻蒙是一套完整的、普通人可以直接使用的作業系統,跟Windows、安卓、IOS類似。(點擊查看大圖)3.2.2 地址映射運行app1時,CPU發出的addr,通過MMU映射到paddr1;運行app2時,CPU發出的同一個addr,
  • 鴻蒙移植01-移植RTOS需要做的事
    移植最小系統要做的幾件事3.1 串口相關與Linux的串口驅動相比,鴻蒙的串口驅動極大簡化了。對於輸出:不使用中斷,直接使用查詢方式輸出。對於輸入:使用中斷,我們只需要提供底層硬體相關的代碼。要注意:使用的是虛擬地址。3.2 MMU設置MMU有2大功能:3.2.1 權限管理
  • 國產stm32的Freertos移植之路--基於GD32
    一、移植環境系統:WIN7MDK:keil v5.26開發板
  • AP6398S藍牙WIFI(2.4G和5G)原理圖PCB
    AP6398S藍牙WIFI(2.4G和5G)原理圖PCB用AD軟體設計,可將此方案移植到各種嵌入式開發中。AP6398S是一款低成本,低功耗的模塊,該模塊具有(2.4GHz和5GHz IEEE 802.11ac/a/b/g/n)+藍牙5.0+FM功能,支持Dual MAC,支持STA/AP模式同時工作,支持WIFI mesh功能,可完美替換AP6356S。
  • 移植mbedtls庫到MCU裸機的兩種方法
    STM32移植方法移植mbedtls開源庫到stm32有兩種方法:① 針對STM32CubeMX中Middleware下面已經提供mbedtks庫的情況:直接使用cubeMX配置即可;② 針對STM32CubeMX中沒有提供mbedtls
  • protel99se畫pcb電路板步驟教程
    protel99se畫pcb電路板步驟教程1.新建.sch文件(Schematic Document),畫電路原理圖
  • 免費開源PCB設計軟體 KiCad 簡介+入門手冊
    最近被很多小夥伴安利了一款小巧的PCB設計軟體,這裡也推薦給大家,歡迎補充更多好用的工具。