主函數開始后的處理流程:
1.外設初始化:HAL_Init()
2.系統時鍾配置
- RCC振盪器初始化:HAL_RCC_OsConfig()
- RCC時鍾初始化:HAL_RCC_ClockConfig()
- 系統滴答定時器初始化:HAL_SYSTICK_Config()
3.按鍵GPIO初始化
- GPIO端口時鍾使能:__HAL_RCC_GPIOA_CLK_ENABLE()
- 工作模式
- 激活下拉或上拉
- 引腳初始化:HAL_GPIO_Init()
4.串口初始化
- 串口GPIO端口使能:__HAL_RCC_GPIOA_CLK_ENABLE()
- 串口初始化(包含串口硬件初始化):HAL_UART_Init()
5.編碼器定時器初始化
- 定時器時鍾使能:__HAL_RCC_TIM3_CLK_ENABLE()
- 編碼器GPIO引腳初始化
- GPIO端口時鍾使能:__HAL_RCC_GPIOB_CLK_ENABLE()
- 工作模式
- 激活下拉或上拉
- 引腳初始化:HAL_GPIO_Init()
- 編碼器中斷優先級配置
- 設置中斷優先級:HAL_NVIC_SetPriority()
- 使能中斷請求:HAL_NVIC_EnableIRQ()
- 定時器基本環境初始化:HAL_TIM_Base_Init()
- 定時器時鍾源配置:HAL_TIM_ConfigClockSource()
- 定時器輸入捕獲環境初始化:HAL_TIM_IC_Init()
- 定時器主輸出模式同步:HAL_TIMEx_MasterConfigSynchronization()
- 定時器輸入捕獲配置:HAL_TIM_IC_ConfigChannel()
6.編碼器定時器啟動:HAL_TIM_Base_Start()
7.L298N定時器初始化
- 基本環境初始化:HAL_TIM_Base_Init()
- 時鍾源配置:HAL_TIM_ConfigClockSource()
- 比較輸出初始化(包含mcu硬件初始化):HAL_TIM_PWM_Init()
- 初始化:HAL_TIM_Base_MspInit()
- 反初始化:HAL_TIM_Base_MspDeInit()
- 主輸出模式同步:HAL_TIMEx_MasterConfigSynchronization()
- 剎車和死區時間配置:HAL_TIMEx_ConfigBreakDeadTime()
- 通道比較輸出配置:HAL_TIM_PWM_ConfigChannel()
- 定時器實際時鍾頻率為:72MHz/(定時器預分頻+1)=36MHz
- PWM頻率為:定時器實際時鍾頻率/(定時器周期+1),[定時器周期為900的話,36MHz/(900+1)=40Khz]
- 實際PWM頻率為:PWM頻率/(高級定時器重復計數寄存器值+1),[高級定時器重復計數寄存器值為0的話,40KHz/0+1=40KHz]
- PWM占空比為:定時器通道比較輸出脈沖/定時器周期*100%,占空比為50%時電機不轉。[定時器通道比較輸出脈沖為450,定時器周期為900的話,則占空比為50%,電機不轉]
- GPIO引腳初始化
- a.GPIO端口時鍾使能:__HAL_RCC_GPIOA_CLK_ENABLE()
- b.設置IO引腳:Pin
- c.設置工作模式:Mode
- d.設置速度:Speed
- e.完成初始化:HAL_GPIO_Init()
8.編碼器定時器中斷捕獲啟動:HAL_TIM_IC_Start_IT()
9.L298N定時器通道和互補通道PWM輸出(可控制電機正反轉)
- HAL_TIM_PWM_Start() 、
- HAL_TIMEx_PWMN_Start()
10.循環:while(1){}
備注:
系統滴答定時器中斷回調函數(每發生一次滴答定時器中斷進入該回調函數一次):HAL_SYSTICK_Callback()
定時器輸入捕獲中斷回調函數:HAL_TIM_IC_CaptureCallback()
重定向C庫函數printf:int fputc(int ch, FILE *f){}
重定向C庫函數getchar、scanf:int fgetc(FILE * f){}
