文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

一文了解串口打印,你知道吗?

2024-12-03 17:39

关注

串口在嵌入式领域不仅是一个通讯接口,还是一种调试工具,其好用程度不亚于硬件仿真。有些环境不方便连接Jlink进行硬件仿真,或者并不是必现的问题,我们需要定位出现问题的地方,可以选择保存log的方式,但是需要后续读取,且受到Flash大小的限制,如果可以放置一台计算机到现场,使用串口打印无疑是最好的办法,在C语言中 printf函数输出各种类型的数据,使用格式控制输出各种长度的字符,甚至输出各种各样的图案,需要将串口重定向到printf函数。

01硬件打印

在STM32的应用中,我们常常对printf进行重定向的方式来把打印信息printf到我们的串口助手。在MDK环境中,我们常常使用MicroLIB+fputc的方式实现串口打印功能,即:串口重映射

代码中记得添加一下头文件

#include < stdio.h >

兼容不同IDE的putchar重映射。

  1. #ifdef __GNUC__ 
  2.    
  3.   #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) 
  4. #else 
  5.   #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) 
  6. #endif  

当然也需要配置下串口,不需要配置中断。

  1. void UART_Init(void) 
  2.   USART_InitTypeDef USART_InitStructure; 
  3.   GPIO_InitTypeDef GPIO_InitStructure; 
  4.  
  5.    
  6.   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); 
  7.    
  8.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); 
  9.    
  10.   GPIO_PinAFConfig(GPIOA, 9, GPIO_AF_USART1); 
  11.    
  12.    
  13.   GPIO_PinAFConfig(GPIOA, 10, GPIO_AF_USART1); 
  14.    
  15.    
  16.   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; 
  17.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; 
  18.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; 
  19.    
  20.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; 
  21.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
  22.   GPIO_Init(GPIOA, &GPIO_InitStructure); 
  23.    
  24.    
  25.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; 
  26.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; 
  27.   GPIO_Init(GPIOA, &GPIO_InitStructure); 
  28.    
  29.   USART_InitStructure.USART_BaudRate = 115200; 
  30.   USART_InitStructure.USART_WordLength = USART_WordLength_8b; 
  31.   USART_InitStructure.USART_StopBits = USART_StopBits_1; 
  32.   USART_InitStructure.USART_Parity = USART_Parity_No; 
  33.   USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; 
  34.   USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; 
  35.    
  36.    
  37.   USART_Init(USART1, &USART_InitStructure); 
  38.    
  39.    
  40.   USART_Cmd(USART1, ENABLE); 

打印函数

  1. PUTCHAR_PROTOTYPE 
  2.    
  3.    
  4.   USART_SendData(USART1, (uint8_t) ch); 
  5.  
  6.    
  7.   while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) 
  8.   {} 
  9.  
  10.   return ch; 

不同的IDE也要对应的的配置。

Keil配置,需要勾选MicroLIB选项。

 

IAR配置

 

打印效果

本文转载自微信公众号「知晓编程」,可以通过以下二维码关注。转载本文请联系知晓编程公众号。

 

来源:知晓编程内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯