你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32G0-HAL库串口控制

[复制链接]
STMCU小助手 发布时间:2022-10-26 23:44
STM32G0-HAL库串口控制
今天分享的是基于HAL库进行串口的配置输出以及重定位实现,使用的开发板是STM32G0B1RE,和F1系列的芯片使用方法是一模一样的。

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

92e3ecda7f954070a36abe11fd34f4b2.png

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

7a749a584551400ab390d9f0fd0a57f7.png

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

代码编写

  1. //常用函数

  2. HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size, uint32_t Timeout);
  3. HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
  4. HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size);
  5. HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);

  6. //接收回调函数
  7. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
复制代码

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

串口回调编写


  1. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
  2. {
  3.         if(rxdata == '1')  //点灯LED4
  4.         {
  5.                 LED3_Open();
  6.                 HAL_UART_Transmit(&huart2,&rxdata,1,1000);
  7.                 HAL_UART_Transmit(&huart2,(unsigned char *)"\nLED OPEN\r\n",10,1000);
  8.         }
  9.         else if(rxdata == '0')
  10.         {
  11.                 LED3_Close();
  12.                 HAL_UART_Transmit(&huart2,&rxdata,1,1000);
  13.                 HAL_UART_Transmit(&huart2,(unsigned char *)"\nLED CLOSE\r\n",10,1000);
  14.         }
  15.         HAL_UART_Receive_IT(&huart2, &rxdata, 1);        //使程序可重新触发接收中断
  16.         }
  17. }
复制代码

printf重定位

  1. //发送字符串
  2. void USART_SendStr(UART_HandleTypeDef *huart,char *str)
  3. {
  4.                 while(*str != '\0')
  5.                 {
  6.                         HAL_UART_Transmit(huart, (uint8_t *)(str++), 1, 1000);
  7.                 }
  8. }


  9. //重定向Printf函数
  10. int fputc(int ch, FILE *f)
  11. {

  12.         HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, 0xFFFF);
  13.         return ch;
  14. }


  15. //
  16. //重定向Sscanf函数
  17. int fgetc( FILE *f)
  18. {

  19.         uint8_t ch = 0 ;
  20.         HAL_UART_Receive(&huart2, (uint8_t *)&ch, 1, 0xFFFF);
  21.         return ch;
  22. }
复制代码

主函数功能测试

c7380e7ad65e46c9a125d335aa76232b.png

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

2a1a0572122a4490907d8e222d2156dd.png

实验结果

2e9a5bb632034a90a416326bd5b00b38.png

————————————————
版权声明:@slow-walker

收藏 评论0 发布时间:2022-10-26 23:44

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版