stm32 001 - hello world(附帶可運行源碼)

初衷

我是做Android開發的,因此本文許多地方會比較繁瑣,各位做單片機開發的輕噴呀
有幸接觸到stm32這個平臺,之前都是在學校接觸過單片機(年代久遠),平常工作中一直是以Android開發爲主,對於系統底層的硬件是怎麼交互的一點兒也沒了解,初次接觸stm32以下幾個地方引起了我的好奇心,想要一探究竟:

  • 最小系統板stm32F103C8T6相信很多和我類似的朋友都會接觸到,1688價格只有8塊錢,裏面可以運行程序,各種四軸飛行器、充電樁、智能電錶等裏面都是它,好驚奇
  • 上面包含了大量硬件接口:UART、GPIO、SPI、I2C、USB、CAN等一堆接口,這小東西真是五臟俱全呢
  • 主頻72mhz,想起來快接近諾基亞塞班手機當時的頻率了哈哈哈,上面可以跑個小型的操作系統,例如rt-thread,人家是國內開源的,不禁想去了解下一個操作系統是怎麼搞起來的,怎麼應對和解決系統資源的分配利用的,好奇
  • 內存20kb,存儲128kb,這個垃圾,我大Android起步都是512mb,想去了解下這能幹個啥,好奇
  • Android的HAL層是用戶態實現的硬件驅動,想去了解下這些外設硬件都是怎麼交互的,剛好有這個stm32,容我去一探究竟

前提準備

硬件環境

巧婦難爲無米之炊,硬件首先得有呀,下面是我在調試使用過程中用到的硬件:

  • STM32F103C8T6:在1688上搜索STM32F103C8T6最小系統,找8塊錢那個就行了
    STM32F103C8T6最小系統板
  • elink32:stm32的調試工具有st-link、elink、jlink等多種,我這裏使用elink-32,唯一在我的ubuntu機器上不會很快損壞的設備,之前在淘寶的16塊錢的st-link被我搞壞了5個,你敢信,購買鏈接請自行淘寶,elink-32使用cmsis-dap/swd方式進行調試
    elink-32調試工具
  • USB轉串口線:以我目前淺顯的知識來說,要這傢伙是用來輸出log的,剛開始在沒有adb的情況下愣是沒習慣這種打個log還需要自己動手的情況,而且由於debug對於某些性能敏感的情況會出現調試沒bug,運行稀爛一地的情況,雖然串口輸出也沒見得多高效,汗- -!
    在這裏插入圖片描述

軟件環境

工欲善其事必先利其器,軟件不得到位,下面是我用到的軟件(我是在Ubuntu系統下開發的,因此選用了跨平臺的開發工具STM32CubeIDE而不是更強大的IAR之類的):
STM32CubeIDE:這他喵是個ST官方出的跨平臺的stm32開發工具,可以在ST官網下載,基於eclipse開發,有下面的特點:

  • 跨平臺,windows、mac、linux都可以用
  • 包含交叉編譯,不用自己糾結咋麼編譯
  • 支持團隊管理,各種版本管理軟件eclipse上熟悉的工具走起
  • 支持stlink、elink等多種調試工具
  • 集成了CubeMx:這個就是神器了,它是stm32平臺使用UI界面配置stm32引腳功能、時鐘、中間件等一系列東西的工具,有了它再也不用翻stm32的文檔去糾結怎麼配置時鐘了,一鍵搞定,美得很。(沒有這個工具,我們就需要手動對着ST的操作手冊一個一個去配置寄存器來修改引腳和時鐘,太災難了)
    在這裏插入圖片描述

硬件連接

請按照下圖連接elink32stm32(用於調試和安裝ROM,類似於Android上通過usb進行adb調試),只需連接3V3GNDDIOSCK四個引腳即可

Windows中可能需要安裝elink32的驅動,請自行解決
stm32支持Serial Wire、JTag、串口等多個方式進行安裝rom,其中區別請自行了解,這裏只選取了硬件比較便宜,操作方便的方法

在這裏插入圖片描述

Hello world應用

在STM32CubeIDE中創建新工程

  1. 和Android應用不同的是:stm32不同的板卡有不同的引腳佈局、外設引腳配置、軟件庫等選擇,因此首先需要確定是哪個型號的芯片才能創建工程,這裏選擇STM32F103C8T6
    在這裏插入圖片描述
  2. Target Project Type選擇STM32Cube,這樣就會關聯stmCubeMx這個引腳配置工具,而不用自己手寫寄存器操作來修改時鐘。
    在這裏插入圖片描述

配置引腳

  1. 配置調試引腳:
    這一步非常重要! 如果忘記配置會導致板子在一次刷寫後不能再訪問,需要通過串口或者其他方式刷入支持SWD的固件才能恢復。在helloworld.ioc打開後的配置頁面中,左側System Core-SYS-Debug中選擇Serial Wire
    在這裏插入圖片描述
  2. 配置helloworld的小燈引腳:
    使用鼠標左鍵點擊右邊引腳圖中的PC13引腳選擇GPIO_Output即可

    在STM32的helloworld中,第一個應用不是打印或者顯示一個helloworld的字符串,而是把板子上的小燈點亮,它裏面的log輸出需要麻煩點,需要自己配置串口和相關的接口,這個下回再說

在這裏插入圖片描述
3. 點擊左上角的保存按鈕,選擇自動生成代碼

修改代碼

main方法修改成下面的樣子,來頻繁打開/關閉PC13引腳上的小燈

/**
* @brief  The application entry point.
* @retval int
*/
int main(void) {
   /* USER CODE BEGIN 1 */

   /* USER CODE END 1 */

   /* MCU Configuration--------------------------------------------------------*/

   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
   HAL_Init();

   /* USER CODE BEGIN Init */

   /* USER CODE END Init */

   /* Configure the system clock */
   SystemClock_Config();

   /* USER CODE BEGIN SysInit */

   /* USER CODE END SysInit */

   /* Initialize all configured peripherals */
   MX_GPIO_Init();
   /* USER CODE BEGIN 2 */

   /* USER CODE END 2 */

   /* Infinite loop */
   /* USER CODE BEGIN WHILE */
   while (1) {
   	/* USER CODE END WHILE */

   	/* USER CODE BEGIN 3 */
    // 等待100ms
   	HAL_Delay(100);
   	// 開關PC13引腳
   	HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
   }
   /* USER CODE END 3 */
}

運行及調試

由於我這裏使用了elink32作爲調試工具,所以不能使用工程中默認的stlink32的調試配置,需要修改下:

  1. 在項目名稱上右鍵Run as - STM32 Cortex-M C/C++ Application
  2. DebugerDebug probe選項中選擇STLINK(Open ocd)
  3. Configuration Script中選擇User Defined
  4. 將生成的helloworld.cfg文件修改爲下面的樣子:
# This is an genericBoard board with a single STM32F103C8Tx chip
#
# Generated by STM32CubeIDE
# Take care that such file, as generated, may be overridden without any early notice. Please have a look to debug launch configuration setup(s)
interface cmsis-dap
transport select swd
adapter_khz 5000

set WORKAREASIZE 0x5000

set CHIPNAME STM32F103C8Tx
set BOARDNAME genericBoard

# Enable debug when in low power modes
set ENABLE_LOW_POWER 1

# Stop Watchdog counters when halt
set STOP_WATCHDOG 1

# Reset configuration
# use software system reset if reset done
reset_config none
set CONNECT_UNDER_RESET 0
set CORE_RESET 0

# ACCESS PORT NUMBER
set AP_NUM 0
# GDB PORT
set GDB_PORT 3333

source [find target/stm32f1x.cfg]

  1. 再次運行即可看到板子上的小燈開始閃爍起來了,helloworld搞定!
  2. 調試也可以直接使用:
    在這裏插入圖片描述
    恭喜,至此第一個STM32的單片機應用就跑起來了,開心不

源碼

如果在運行過程中出現任何問題,可以嘗試下載我這兒的工程源碼,用IDE打開測試

百度網盤鏈接 提取碼: s8kn

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章