stm32學習
十二.串口
5.USART的HAL庫用法
USART/UART異步通信配置步驟:
- 配置串口工作參數:HAL_UART_Init();
- 串口底層初始化:HAL_UART_MspInit();
- 開啟串口異步接收中斷:HAL_UART_Receive_IT();
- 設置優先級,使能中斷:HAL_NVIC_SetPriority();、HAL_NVIC_EnableIRQ();
- 編寫中斷服務函數:USARTx_IRQHandler();、UARTx_IRQHandler();
- 串口數據發送:USART_DR、HAL_UART_Transmit();
十三.看門狗
1.IWDG
Independent watchdog,獨立看門狗
本質:產生系統復位信號的計數器
喂狗:在計數器數到0之前,將計數器復位
2.WWDG
Window watchdog,窗口看門狗
與IWDG的區別:需在窗口內喂狗(早于下限或晚于上限均復位),可檢測超時和異常提前喂狗,配置復雜
應用場景:
IWDG:適用于主時鐘可能故障、對可靠性要求極高的場景(如安全系統),獨立工作,對時間精度要求低
WWDG:適用于需精確控制復位時間的場景(如實時任務監控),通過窗口嚴格監控,確保任務在規定時段內運行
十四.TIMER
1.概述
軟件定時原理:用純軟件(CPU死等)的方式實現定時功能,不精準,且拖累CPU
硬件定時:用精準的時基,實現定時功能
STM32定時器分類:

整體的區別:

2.配置步驟
- 配置定時器基礎工作參數:HAL_TIM_Base_Init()
- 定時器基礎MSP初始化:HAL_TIM_Base_MspInit(),配置NVIC、CLOCK
- 使能更新中斷并啟動計數器:HAL_TIM_Base_Start_IT()
- 設置優先級,使能中斷:HAL_NVIC_SetPriority()、HAL_NVIC_EnableIRQ()
- 編寫中斷服務函數:TIMx_IRQHandler
- 編寫定時器更新中斷回調函數:HAL_TIM_PeriodElapsedCallback()
3.PWM
通用定時器PWM輸出實驗配置步驟:
- 配置定時器基礎工作參數:HAL_TIM_PWM_Init()
- 定時器PWM輸出MSP初始化:HAL_TIM_PWM_MspInit(),配置NVIC、CLOCK、GPIO等
- 配置PWM模式/比較值等:HAL_TIM_PWM_ConfigChannel()
- 使能輸出并啟動計數器:HAL_TIM_PWM_Start()
- 修改比較值控制占空比(可選):__HAL_TIM_SET_COMPARE()
- 使能通道預裝載(可選):__HAL_TIM_ENABLE_OCxPRELOAD()
4.通用定時器輸入捕獲脈寬測量
輸入捕獲脈寬測量是微控制器利用內部定時器的 輸入捕獲功能 來測量外部脈沖信號寬度的技術。這一功能在電機控制、信號檢測、通信協議解析等場景中廣泛應用
配置步驟:
- 配置定時器基礎工作參數:HAL_TIM_IC_Init()
- 定時器輸入捕獲MSP初始化:HAL_TIM_IC_MspInit()配置NVIC、CLOCK、GPIO
- 配置輸入通道映射、捕獲邊沿:HAL_TIM_IC_ConfigChannel()
- 設置優先級,使能中斷:HAL_NVIC_SetPriority()、HAL_NVIC_EnableIRQ()
- 使能定時器更新中斷:__HAL_TIM_ENABLE_IT()
- 使能捕獲、捕獲中斷及計數器:HAL_TIM_IC_Start_IT()
- 編寫中斷服務函數:TIMx_IRQHandler()
- 編寫更新中斷和捕獲回調函數:HAL_TIM_PeriodElapsedCallback()、HAL_TIM_IC_CaptureCallback()
5.通用定時器脈沖計數
配置步驟:
- 配置定時器基礎工作參數:HAL_TIM_IC_Init()
- 定時器輸入捕獲MSP初始化:HAL_TIM_IC_MspInit()配置NVIC、CLOCK、GPIO
- 配置定時器從模式等:HAL_TIM_SlaveConfigSynchro()
- 使能輸入捕獲并啟動計數器:HAL_TIM_IC_Start()
- 獲取計數器的值:__HAL_TIM_GET_COUNTER()
- 設置計數器的值:__HAL_TIM_SET_COUNTER()
6.高級定時器
輸出指定個數PWM配置步驟:
- 配置定時器基礎工作參數:HAL_TIM_PWM_Init()
- 定時器PWM輸出MSP初始化:HAL_TIM_PWM_MspInit(),配置NVIC、CLOCK、GPIO等
- 配置PWM模式/比較值等:HAL_TIM_PWM_ConfigChannel()
- 設置優先級,使能中斷:HAL_NVIC_SetPriority()、HAL_NVIC_EnableIRQ()
- 使能定時器更新中斷:__HAL_TIM_ENABLE_IT()
- 使能輸出并啟動計數器:HAL_TIM_PWM_Start()
- 編寫中斷服務函數:TIMx_IRQHandler()
- 編寫更新中斷和捕獲回調函數:HAL_TIM_PeriodElapsedCallback()
輸出比較模式配置步驟:
- 配置定時器基礎工作參數:HAL_TIM_OC_Init()
- 定時器PWM輸出MSP初始化:HAL_TIM_PWM_MspInit(),配置NVIC、CLOCK、GPIO等
- 配置輸出比較模式:HAL_TIM_OC_ConfigChannel()
- 使能通道預裝載:__HAL_TIM_ENABLE_OCxPRELOAD()
- 使能輸入捕獲并啟動計數器:HAL_TIM_OC_Start()
- 修改捕獲/比較計數器的值:__HAL_TIM_SET_COMPARE()
死區控制、剎車

元器件有延遲特性,所以通電后會有一段死區時間
死區會導致 穩態精度下降、執行器抖動、能耗增加,所以要有死區控制系統
剎車:讓電機快速停轉,stm32可以通過寄存器輸出剎車信號
配置步驟:
- 配置定時器基礎工作參數:HAL_TIM_PWM_Init()
- 定時器PWM輸出MSP初始化:HAL_TIM_PWM_MspInit(),配置NVIC、CLOCK、GPIO等
- 配置輸出比較模式:HAL_TIM_OC_ConfigChannel()
- 配置剎車功能、死區時間等:HAL_TIMEx_ConfigBreakDeadTime()
- 使能輸出并啟動計數器:HAL_TIM_PWM_Start()
- 使能互補輸出、主輸出、計數器:HAL_TIMEx_PWMN_Start()
PWM輸入模式
配置步驟:
- 配置定時器基礎工作參數:HAL_TIM_IC_Init()
- 定時器PWM輸出MSP初始化:HAL_TIM_IC_MspInit(),配置NVIC、CLOCK、GPIO等
- 配置輸出比較模式:HAL_TIM_IC_ConfigChannel()
- 配置從模式,觸發源等:HAL_TIM_SlaveConfigSynchro()
- 設置優先級,使能中斷:HAL_NVIC_SetPriority()、HAL_NVIC_EnableIRQ()
- 使能輸入捕獲并啟動計數器:HAL_TIM_IC_Start()、HAL_TIM_IC_Start_IT()
- 編寫中斷服務函數:TIMx_IRQHandler()
- 編寫輸入捕獲回調函數:HAL_TIM_IC_CaptureCallback()
十五.某些外設
1.MPU
f1沒有
memory protection unit內存保護單元
功能:
- 設置不同的存儲區域的存儲器訪問權限
- 設置存儲器(內存和外設屬性):可緩存、可緩沖、可共享
三種內存類型:
- Normal memory:CPU以最高效的方式加載和存儲字節
- Device memory:加載和存儲要嚴格按照次序進行
- Strongly ordered memory:程序完全按照代碼順序執行,CPU會等待當前加載存儲執行完畢
