【stm32入门】第二天环境搭建、RCC时钟、GPIO、闪烁实验与有源蜂鸣器实验
學習參考:STM32入門教程-2022持續更新中_江科大自化協P3-1~3-3
這兩天學的稀里糊涂,這里看一點那里看一點,最后什么也沒搞明白,為了電賽凈選件但卻發現最基礎的32還沒搞太懂,今天難得清閑,把視頻重新看了一遍,覺得收獲頗豐,遂開始重新記錄筆記。
今日收獲:LED閃爍實驗、有源蜂鳴器實驗
電賽倒計17天
- 開始之前
基礎部分全部看完才發現stm32并沒有我想象的難,其實流程上和arduino都是一樣的,只是自己需要配置的東西變多了,需要很詳細的初始化和 使用,而不像arduino那樣只需要簡單的初始化,但是這也是arduino的弊病,如果想要更改默認的參數會讓你感到很迷糊,這可能是stm32做的好的地方。
代碼的基礎流程:開啟時鐘👉初始化引腳👉在死循環使用引腳
在平衡車的教學中,范學長直接把各個元件的初始化都包裝到其他C文件和.h文件中,修改定義也要到那里去修改,這可能讓老手很方便操作和修改,但是讓剛入門的我在跳來跳去的過程中感到迷茫,在👆面的教程中,基本上所有代碼都是在main函數中寫出的,可能不是那么方便管理,但是讓我感受到arduino書寫代碼時候的熟悉感,一種莫名的熟悉感,希望它能幫助我學的更快吧。
第二天環境搭建與GPIO
- 一、配置環境P3-1
- 二、復位和時鐘設置(RCC)
- 三、通用輸入/輸出(GPIO)
- 1. GPIO_Init
- 2. 函數GPIO_SetBits與GPIO_ResetBits
- 3. 函數GPIO_WriteBit
- 4. 函數GPIO_Write
- 4. C語言基礎補齊(宏定義、數據類型、typedef結構體、枚舉)
- 4.1 宏定義
- 4.2 數據類型
- 4.3 typedef
- 4.4 結構體
- 4.5 枚舉
一、配置環境P3-1
方法1:直接復制已經建立好的環境
方法2:利用stm32f10x的庫函數從頭創立👇
3-1視頻,提供參考
- 建立工程文件夾,Keil中新建工程,選擇型號
- 工程文件夾里建立Start、Library、User等文件夾,復制固件庫里面的文件到工程文件夾
- 工程里對應建立Start、Library、User等同名稱的分組,然后將文件夾內的文件添加到工程分組里
- 工程選項,C/C++,Include Paths內聲明所有包含頭文件的文件夾
- 工程選項,C/C++,Define內定義USE_STDPERIPH_DRIVER
- 工程選項,Debug,下拉列表選擇對應調試器,Settings,Flash Download里勾選Reset and Run
二、復位和時鐘設置(RCC)
參考數據手冊:STM32F103xx固件函數庫用戶手冊
//常見使用的語句 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);| RCC_AHBPeriphClockCmd | 使能或者失能 AHB 外設時鐘 |
| RCC_APB2PeriphClockCmd | 使能或者失能 AHB2 外設時鐘 |
| RCC_APB1PeriphClockCmd | 使能或者失能 AHB1 外設時鐘 |
3個函數的使用方法是一樣的
| 功能描述 | 使能或者失能 AHB 外設時鐘 |
| 輸入參數 1 | RCC_AHB2Periph: 門控 AHB 外設時鐘 |
| 功能描述 | NewState:指定外設時鐘的新狀態 。這個參數可以取:ENABLE 或者 DISABLE |
| 輸出參數 | 無 |
| 返回值 | 無 |
| 先決條件 | 無 |
| 被調用函數 | 無 |
Table 373.RCC_AHB2Periph 值
| RCC_APB2Periph_AFIO | 功能復用 IO 時鐘 |
| RCC_APB2Periph_GPIOA | GPIOA 時鐘 |
| RCC_APB2Periph_GPIOB | GPIOB時鐘 |
| RCC_APB2Periph_TIM1 | TIM1 時鐘 |
| RCC_APB2Periph_SPI1 | SPI1 時鐘 |
省略了好多值,用到了再查吧
當某個庫函數需要被調用函數為時鐘函數時,把他使能就好了,大部分的都需要
三、通用輸入/輸出(GPIO)
GPIO 庫函數常用的篩選
| GPIO_Init | 根據 GPIO_InitStruct 中指定的參數初始化外設 GPIOx 寄存器 |
| GPIO_StructInit | 把 GPIO_InitStruct 中的每一個參數按缺省值填入 |
| GPIO_ReadInputDataBit | 讀取指定端口管腳的輸入 |
| GPIO_ReadInputData | 讀取指定的 GPIO 端口輸入 |
| GPIO_ReadOutputDataBit | 讀取指定端口管腳的輸出 |
| GPIO_ReadOutputData | 讀取指定的 GPIO 端口輸出 |
| GPIO_SetBits | 設置指定的數據端口位 |
| GPIO_ResetBits | its 清除指定的數據端口位 |
| GPIO_WriteBit | 設置或者清除指定的數據端口位 |
| GPIO_Write | 向指定 GPIO 數據端口寫入數據 |
| GPIO_PinRemapConfig | 改變指定管腳的映射(復用其他功能) |
| GPIO_EXTILineConfig | 選擇 GPIO 管腳用作外部中斷線路 |
| 具體使用方法參考庫函數,只說幾個用到的 |
1. GPIO_Init
| 功能描述 | 根據 GPIO_InitStruct 中指定的參數初始化外設 GPIOx 寄存器 |
| 輸入參數 1 | GPIOx:x 可以是 A,B,C,D 或者 E,來選擇 GPIO 外設 |
| 輸入參數 2 | GPIO_InitStruct:指向結構 GPIO_InitTypeDef 的指針,包含了外設 GPIO 的配置信息 |
| 輸出參數 | 無 |
| 返回值 | 無 |
| 先決條件 | 無 |
| 被調用函數 | 無 |
- 其中,GPIO_Pin包含16個管腳,從0~15,所以可以這么設置
- GPIO_Speed有三個值可以選擇,10MHz,2MHz,50MHz,使用如下
- GPIO_Mode可以設置引腳的工作狀態,共有8種
| GPIO_Mode_AIN | 模擬輸入 |
| GPIO_Mode_IN_FLOATING | 浮空輸入 |
| GPIO_Mode_IPD | 下拉輸入 |
| GPIO_Mode_IPU | 上拉輸入 |
| GPIO_Mode_Out_OD | 開漏輸出 |
| GPIO_Mode_Out_PP | 推挽輸出 |
| GPIO_Mode_AF_OD | 復用開漏輸出 |
| GPIO_Mode_AF_PP | 復用推挽輸出 |
一般來說,輸出設置推挽輸出即可,
推挽輸出高電平低電平都有供應能力
開漏輸出高電平處于高阻抗狀態沒有供電能力,低電平有供電能力
綜上,GPIO的初始化代碼一般為:
2. 函數GPIO_SetBits與GPIO_ResetBits
GPIO_SetBits是設置數據的端口位,高電平,GPIO_ResetBits是清除數據的端口位,低電平
| GPIOx:x 可以是 A,B,C,D 或者 E,來選擇 GPIO 外設 | GPIO_Pin |
3. 函數GPIO_WriteBit
GPIO_WriteBit是設置或清除數據的端口位,增加了一個參數,相當于聚合了👆面的兩個
| GPIOx:x 可以是 A,B,C,D 或者 E,來選擇 GPIO 外設 | GPIO_Pin | 該參數必須取枚舉 BitAction 的其中一個Bit_RESET;Bit_SET: |
| 所以 |
4. 函數GPIO_Write
做流水燈的代碼里用過,如下👇
4. C語言基礎補齊(宏定義、數據類型、typedef結構體、枚舉)
STM32入門教程-2022持續更新中_江科大自化協 P3-3
講的非常明白,但一會兒就去吃飯了,簡單寫寫
4.1 宏定義
簡單的說,就是取了個外號,常用經常修改的參數,如果用數字來寫的話,每次修改都需要頻繁的查找,如果用字符串在前面定義這個參數,那就只需要改動一次就行,并且字符串也更能增加函數的可讀性,如
define Speed 100 //定義Speed這個單詞和100等價4.2 數據類型
4.3 typedef
引用課程的ppt👇
關鍵字:typedef
用途:將一個比較長的變量類型名換個名字,便于使用
定義typedef:
引用typedef:
uint8_t a; //等效于unsigned char a;
4.4 結構體
類比數組,這是一個可以涵蓋多種數據格式的新格式
關鍵字:struct
用途:數據打包,不同類型變量的集合
定義結構體變量:
因為結構體變量類型較長,所以通常用typedef更改變量類型名
引用結構體成員:
或
pStructName->x = 'A'; //pStructName為結構體的地址 pStructName->y = 66; pStructName->z = 1.23;*4.5 枚舉
關鍵字:enum
用途:定義一個取值受限制的整型變量,用于限制變量取值范圍;也被可以認為是宏定義的集合,如果賦給某種枚舉類型變量的值不在限制里,會有warning
定義枚舉變量:
因為枚舉變量類型較長,所以通常用typedef更改變量類型名
引用枚舉成員:
總結
以上是生活随笔為你收集整理的【stm32入门】第二天环境搭建、RCC时钟、GPIO、闪烁实验与有源蜂鸣器实验的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微软拟用DNA存储数据:一段就能顶一个数
- 下一篇: crm如何做好客户关系管理?