【STM32G0-HAL库串口控制】

news/2024/12/2 17:49:20/

STM32G0-HAL库串口控制

今天分享的是基于HAL库进行串口的配置输出以及重定位实现,使用的开发板是STM32G0B1RE,和F1系列的芯片使用方法是一模一样的。

一、打开CubeMX进行工程配置 这里使用的是串口2
具体的操作步骤就不重复了,就介绍一些关键步骤
从配置的结果可以看出 串口2 使用的是A2->TX  A3->RX

在这里插入图片描述

这里我使用了串口中断就行数据接收控制LED的亮灭,所以不要忘记将中断使能打开。

在这里插入图片描述

时钟我还是默认的 没有做修改,将这些配置完成后 就可以生成工程了

代码编写

//常用函数HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size, uint32_t Timeout);
HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size);
HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);//接收回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)

我们在进行配置的使用不要忘记配置接收中断这个函数HAL_UART_Receive_IT,要不然在回调函数里面中断接收可能不能正常使用,这句也相当于是串口中断使能。

串口回调编写


void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{if(rxdata == '1')  //点灯LED4{LED3_Open();HAL_UART_Transmit(&huart2,&rxdata,1,1000);HAL_UART_Transmit(&huart2,(unsigned char *)"\nLED OPEN\r\n",10,1000);}else if(rxdata == '0'){LED3_Close();HAL_UART_Transmit(&huart2,&rxdata,1,1000);HAL_UART_Transmit(&huart2,(unsigned char *)"\nLED CLOSE\r\n",10,1000);}HAL_UART_Receive_IT(&huart2, &rxdata, 1);	//使程序可重新触发接收中断}
}

printf重定位

//发送字符串
void USART_SendStr(UART_HandleTypeDef *huart,char *str)
{while(*str != '\0'){HAL_UART_Transmit(huart, (uint8_t *)(str++), 1, 1000);}
}//重定向Printf函数
int fputc(int ch, FILE *f) 
{HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, 0xFFFF);return ch;
}//
//重定向Sscanf函数
int fgetc( FILE *f) 
{uint8_t ch = 0 ;HAL_UART_Receive(&huart2, (uint8_t *)&ch, 1, 0xFFFF);return ch;
}

主函数功能测试

在这里插入图片描述

注意:在进行串口重定位的时候需将Target 里面的Use MicroLib勾选上不然使用不了。

在这里插入图片描述

实验结果

在这里插入图片描述


http://www.ppmy.cn/news/307046.html

相关文章

STM32G431——按键的三行代码(长按、短按、单击、双击)

按键的三行代码(长按、短按、单击、双击) 按键的三行代码按键的长按、短按按键的单击、双击 按键的三行代码 key_value KEY_Scan(); //读取按键的键值 key_up ~key_value & (key_old ^ key_value); //按键的上升沿检测 只在按键抬起的瞬间有效 其他时刻都为零…

分析STM32G0 SPI外设不能触发RXNE接收标志的原因

今天准备移植STM32F030R8T6的程序到STM32G030C8T6上,程序中用到了硬件SPI外设,因为STM32G0用的HALLL库而不是不是标准库,所以我用STM32Cube MX生成了SPI的LL库代码,但是使能SPI后发现硬件怎么都不能触发RXNE接收标志,生…

为什么JVM不建议超过32G内存

在学习ES发现JVM内存不要超过32G的建议,故查找了一下原因。 java -Xmx32766m -Xms32766m -XX:PrintFlagsFinal 2> /dev/null | grep UseCompressedOops bool UseCompressedOops : true {lp64_product}查…

<STC32G12K128入门第五节>Time定时器

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、timer是什么?二、相关寄存器1.2. THx & TLx3.案例总结前言 今天无聊的搞了一下stc32G12k128的timer定时器 一、timer是什么? 这里就是我们使用的开发板上面的timer资源 二、相关寄…

32g服务器做成虚拟,服务器32g内存 tomcat设置多大

服务器32g内存 tomcat设置多大 内容精选 换一换 目的调整系统配置选项,充分发挥系统硬件性能。调整系统配置选项,充分发挥系统硬件性能。方法具体优化项详见表1。OS配置参数参数名称参数含义优化建议配置方法vm.swappinessswap为系统虚拟内存,使用虚拟内存会导致性能下降,应…

STC32G 单片机EEPROM 操作实例

一 STC32G 单片机EEPROM简介 STC32G系列单片机内部集成了大量的EEPROM,特别是STC32G12K128集成多达128K EEPROM。 STC32G内部EEPROM可擦写10万次,分若干扇区,每个扇区512字节。EEPROM的写操作只能将1写为0。要将0写为1,必须擦除…

[STM32爬坑]STM32G431ADC工作不正常:

近期收到了一块STM32G4系列的开发板,作为试用开发板,尝试使用G4做电源类项目,在使用G4系列开发板的时候,碰到了ADC工作不正常的情况,具体情况如下所示: 由于项目需要,主频限定在20Mhz&#xff0…

STM32G0开发笔记-Platformio+libopencm3-按键和外部中断

【原文】https://makerinchina.cn/article_12434df0dc1e.html title: STM32G0开发笔记-Platformiolibopencm3-按键和外部中断 tags: STM32MCUSTM32G070libopencm3MonkeyPiexti categories: STM32 date: 2022-9-8 09:33:05 使用Platformio平台的libopencm3开发框架来开发STM32…