STM32G4 电机外设篇(一) GPIO+UART

06-02 1061阅读

目录

  • 一、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会控制二极管亮灭来指示板子的状态
              • 也可以开关电机
                1. 打开STM32CUBEMX选择MCU(中间更新太慢可以不更新)

                  STM32G4 电机外设篇(一) GPIO+UART

                2. 选择 MCU HSE为外部晶振

                  STM32G4 电机外设篇(一) GPIO+UART

                3. 配置时钟树,PLL时钟源选择HSE,外部晶振24M,HCLK配置为170M;

                  STM32G4 电机外设篇(一) GPIO+UART

                4. debug接口配置为串行接口

                  STM32G4 电机外设篇(一) GPIO+UART

                5. 配置MCU的GPIO口,给GPIO口命名,开启NVIC终端管理程序

                  STM32G4 电机外设篇(一) GPIO+UART

                6. 配置项目路径,项目位置,代码生成方式,点击生成代码,打开工程

                  STM32G4 电机外设篇(一) GPIO+UART

                  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

                        1. 打开之前的Cubemx程序,配置UART的Rx和Tx引脚
                          • 详细的配置要看STM32G4的手册,举例过采样的配置,就可以更好的进行信号的采样

                            STM32G4 电机外设篇(一) GPIO+UART

                          • 配置中断和DMA

                            STM32G4 电机外设篇(一) GPIO+UART

                            STM32G4 电机外设篇(一) GPIO+UART

                          • 生成代码并在Keil中打开
                        2.2 代码和实验现象
                        • 在主函数28行添加如下代码,添加头文件

                          #include

                        • 在主函数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可能会卡住

                            STM32G4 电机外设篇(一) GPIO+UART

                          • 按照之前的文章接线,编译代码并下载,按下复位按键

                          • 打开串口调试助手,按下按键,实现实验效果

                            STM32G4 电机外设篇(一) GPIO+UART

                          • 剩余UART部分参考视频学习(包括DMA发送数据和中断接收数据)

                            附学习参考网址

                            1. STM32G4 FOC开发实战

                            欢迎大家有问题评论交流 (* ^ ω ^)

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

相关阅读

目录[+]

取消
微信二维码
微信二维码
支付宝二维码