STM32CubeMx配置定時器的編碼器模式
上次文章寫了編碼器是如何工作的,今天就來用STM32F103C8T6的TIM3的通道1跟通道2編寫一個編碼器識別程序。
編程思路:
A相:TIM3_CH1
B相:TIM3_CH2
SWITCH:PB5(外部中斷的方式)
實現效果:
編碼器順時針旋轉編碼器計數值 +1
編碼器逆時針旋轉編碼器計數值 -1
按下SWITCH編碼器計數值值清 0
話不多說,上教程!
1.配置時鐘
- 選擇外部高速時鐘源HSE
在這里插入圖片描述
2.配置SWITCH管腳為外部中斷模式(默認上拉)
- 選擇中斷模式觸發下降沿有效
- 默認是上拉輸入
- 添加用戶標簽為SWITCH
在這里插入圖片描述
使能NVIC配置
在這里插入圖片描述
3.配置定時器管腳為編碼器模式
- 選擇編碼器模式
- 分頻值設置為2-1
- 計數值設置為1
- 自動重裝載值1
- 自動重載使能
- 通道1,2都計數
- 都是上升沿有效
在這里插入圖片描述
4.配置時鐘到72MHz
- 手動輸入72MHz自動匹配
在這里插入圖片描述
5.配置工程屬性
- 填寫工程名字
- 選擇工程路徑
- 選擇工程平臺(KEIL MDK)
6.配置工程代碼屬性
- 拷貝必要的庫文件
- 單獨形成.c跟.h文件
在這里插入圖片描述
7.生產工程并添加修改代碼
- 直接打開工程
- 修改必要代碼
在這里插入圖片描述
7.1修改定時器代碼
- 添加一個自定義結構體
/* USER CODE BEGIN Private defines */
typedefstruct
{
int Encoder_Val;
int Encoder_Dir;
}EC11_t;
extern EC11_t EC11;
/* USER CODE END Private defines */
編寫一個中斷回調函數
編寫回調函數邏輯代碼
/* USER CODE BEGIN 0 */
EC11_t EC11;
/* USER CODE END 0 */
/* USER CODE BEGIN 1 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
uint8_t dir = 0;
if(htim == &htim3)
{
dir = __HAL_TIM_IS_TIM_COUNTING_DOWN(&htim3);
if(dir==1)
{
EC11.Encoder_Val++;
EC11.Encoder_Dir = 1;
}
if(dir==0)
{
EC11.Encoder_Val--;
EC11.Encoder_Dir = -1;
}
}
}
/* USER CODE END 1 */
7.2修改外部中斷代碼
添加一個中斷回調函數
/* USER CODE BEGIN 1 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
EC11.Encoder_Val = 0;
}
/* USER CODE END 1 */
7.3修改初始化代碼
/* USER CODE BEGIN TIM3_Init 2 */
__HAL_TIM_CLEAR_IT(&htim3,TIM_IT_UPDATE);
HAL_TIM_Encoder_Start(&htim3, TIM_CHANNEL_ALL);
__HAL_TIM_ENABLE_IT(&htim3,TIM_IT_UPDATE);
/* USER CODE END TIM3_Init 2 */
8.下載調試代碼
- 現象1順時針旋轉編碼器值加1
在這里插入圖片描述
- 現象2順時針旋轉編碼器值減1
在這里插入圖片描述
- 按鍵按下編碼器值清零
在這里插入圖片描述
9.總結
至此編碼器已經全部寫完了。STM32CubeMx的使用比較方便,注意一點就是如果修改代碼盡量寫到英文的注釋中去,這樣即使再重新修改CubeMx配置重新生成代碼也不會改變原來的程序,否則原來的代碼就沒了,別問我咋知道的血淚的教訓?。。?!
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
編碼器
+關注
關注
41文章
3364瀏覽量
131571 -
程序
+關注
關注
114文章
3631瀏覽量
79554 -
旋轉編碼器
+關注
關注
5文章
143瀏覽量
25739 -
STM32F103C8T6
+關注
關注
104文章
150瀏覽量
80975 -
stm32cubemx
+關注
關注
5文章
260瀏覽量
14448
發布評論請先 登錄
相關推薦
stm32cubemx配置定時器
stm32cubemx配置定時器,文章目錄前言keil主函數時鐘配置中斷響應CUBE主函數配置函數中斷響應前言本文主要介紹使用keil和
發表于 08-10 07:55
【MCU】基于STM32CubeMX定時器中斷實現LED閃爍
基于STM32CubeMX定時器中斷實現 LED 閃爍本實驗基于STM32CubeMX實現對STM32開發板的配置,通過
發表于 10-29 11:06
?20次下載
STM32CUBEMX配置教程(十二)STM32的定時器觸發的固定頻率ADC采樣(使用DMA)
STM32CUBEMX配置教程(十二)STM32的定時器觸發的固定頻率ADC采樣(使用DMA)
發表于 11-24 13:51
?83次下載
STM32CUBEMX配置教程(十三)STM32的定時器觸發的固定頻率DAC輸出(使用DMA)
STM32CUBEMX配置教程(十三)STM32的定時器觸發的固定頻率DAC輸出(使用DMA)
發表于 11-24 14:06
?44次下載
評論