目錄
- 一、STM32G4 電機外設篇(一) GPIO+UART
- 1 GPIO
- 1.1 STM32CUBEMX 配置以及Keil代碼
- 1.2 代碼和實驗現象
- 2 UART
- 2.1 STM32CUBEMX 配置以及Keil代碼
- 2.2 代碼和實驗現象
- 附學習參考網址
- 歡迎大家有問題評論交流 (* ^ ω ^)
一、STM32G4 電機外設篇(一) GPIO+UART
1 GPIO
1.1 STM32CUBEMX 配置以及Keil代碼
- GPIO會控制二極管亮滅來指示板子的狀態
- 也可以開關電機
- 打開STM32CUBEMX選擇MCU(中間更新太慢可以不更新)
- 選擇 MCU HSE為外部晶振
- 配置時鐘樹,PLL時鐘源選擇HSE,外部晶振24M,HCLK配置為170M;
- debug接口配置為串行接口
- 配置MCU的GPIO口,給GPIO口命名,開啟NVIC終端管理程序
- 配置項目路徑,項目位置,代碼生成方式,點擊生成代碼,打開工程
7.打開Keil工程
1.2 代碼和實驗現象
- 在主函數147行添加如下代碼
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{/* Prevent unused argument(s) compilation warning */UNUSED(GPIO_Pin);if(Button1_Pin == GPIO_Pin){HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);}if(Button2_Pin == GPIO_Pin){HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);}if(Button3_Pin == GPIO_Pin){HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_RESET);HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,GPIO_PIN_RESET);}/* NOTE: This function should not be modified, when the callback is needed,the HAL_GPIO_EXTI_Callback could be implemented in the user file*/
}
- 按照之前的文章接線,編譯代碼并下載,按下復位按鍵
- 最終完成功能的實現
- 三個按鈕可以分別控制LED燈的亮滅
2 UART
2.1 STM32CUBEMX 配置以及Keil代碼
- 串口通訊在電機中一般使用TTL通訊,電機是電磁耦合干擾很大的設備,一般串口線和電源線是纏繞在一起走線的,所以電源的干擾型號也會耦合到串口通訊上,容易導致錯誤。所以一般使用485或者can來通訊。TTL一般只用來debug和實時觀察電機的一些狀態,打印波形等
- 在上一章的基礎上,使能 UASRT3,對應 PB10和 PB11 I/O口,將波特率調整為
115200Bits/s
- 打開之前的Cubemx程序,配置UART的Rx和Tx引腳
- 詳細的配置要看STM32G4的手冊,舉例過采樣的配置,就可以更好的進行信號的采樣
- 詳細的配置要看STM32G4的手冊,舉例過采樣的配置,就可以更好的進行信號的采樣
- 配置中斷和DMA
- 生成代碼并在Keil中打開
2.2 代碼和實驗現象
-
在主函數28行添加如下代碼,添加頭文件
#include <stdio.h>
-
在主函數160行添加如下代碼,按鍵實現LED的反轉,并且通過串口打印翻轉的信息
-
同時把串口發送的字符轉變為數據流發送出去
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{/* Prevent unused argument(s) compilation warning */UNUSED(GPIO_Pin);if(Button1_Pin == GPIO_Pin){HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);printf("LED1 Toggle\r\n");}if(Button2_Pin == GPIO_Pin){HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);printf("LED2 Toggle\r\n");}if(Button3_Pin == GPIO_Pin){HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_RESET);HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,GPIO_PIN_RESET);printf("LED1 and LED2 open\r\n");}/* NOTE: This function should not be modified, when the callback is needed,the HAL_GPIO_EXTI_Callback could be implemented in the user file*/
}int fputc(int ch, FILE *f)
{while((USART3->ISR & 0x40) == 0);USART3->TDR = (uint8_t)ch;return ch;
}
-
注意這里要打開microlib使用,否則printf可能會卡住
-
按照之前的文章接線,編譯代碼并下載,按下復位按鍵
-
打開串口調試助手,按下按鍵,實現實驗效果
-
剩余UART部分參考視頻學習(包括DMA發送數據和中斷接收數據)
附學習參考網址
- STM32G4 FOC開發實戰