《LP-MSPM0L1306开发板试用体验---printf重定向到串口》

[复制链接]
 楼主| gaoyang9992006 发表于 2023-10-23 16:43 | 显示全部楼层 |阅读模式
看了一下,官方提供的例子好像没有重定向printf到串口的。
我来尝试实现
(1)在main.c包含必要的stdio.h头文件进来
(2)在工程的设置中启用MicroLIB库
查看stdio.h以确定要实现哪个函数即可完成重定向
  1. int fputc(int ch, FILE *stream)
  2. {
  3.         //当串口0忙的时候等待,不忙的时候再发送传进来的字符
  4.         while(DL_UART_isBusy(UART_0_INST)==true){}
  5.     DL_UART_transmitData(UART_0_INST,ch);
  6.     return ch;
  7. }
编写如上代码,经过测试,如果不判断串口是否忙,将无法收到printf发送来的内容。
所以,先判断串口0是否忙,如果忙就等待,如果不忙,就发送当前传递进来的字符。
  1. #include "ti_msp_dl_config.h"
  2. #include "stdio.h"

  3. int fputc(int ch, FILE *stream)
  4. {
  5.         //当串口0忙的时候等待,不忙的时候再发送传进来的字符
  6.         while(DL_UART_isBusy(UART_0_INST)==true){}
  7.     DL_UART_transmitData(UART_0_INST,ch);
  8.     return ch;
  9. }

  10. int main(void)
  11. {       
  12.         SYSCFG_DL_init();
  13.         DL_GPIO_clearPins(Blinky_PORT,Blinky_RED_LED_PIN);
  14.         for(int i=0;i<10;i++)
  15.         {
  16.                 DL_GPIO_togglePins(Blinky_PORT,Blinky_RED_LED_PIN);
  17.                 delay_cycles(10000000);
  18.                 printf("Hello\n");
  19.         }
  20.         while(1)
  21.         {               
  22.                 if( DL_GPIO_readPins(Blinky_PORT,Blinky_Button_PIN) )
  23.                 {
  24.                         DL_GPIO_setPins(Blinky_PORT,Blinky_RED_LED_PIN);
  25.                 }
  26.                 else
  27.                 {
  28.                         DL_GPIO_clearPins(Blinky_PORT,Blinky_RED_LED_PIN);
  29.                         //按下按钮就发送一个字母A,然后等待松手。
  30.                         DL_UART_transmitData(UART_0_INST,'A');
  31.                         printf("Hello\n");
  32.                         while(DL_GPIO_readPins(Blinky_PORT,Blinky_Button_PIN)==0);
  33.                 }               
  34.         }       
  35. }
005.png
经过测试可以正常哈喽了。
004.png

xyz549040622 发表于 2023-10-31 21:29 | 显示全部楼层
重定向这么简单?我看网上的教程,修改的东西不少,原来是我想多了。
 楼主| gaoyang9992006 发表于 2023-11-1 08:52 | 显示全部楼层
xyz549040622 发表于 2023-10-31 21:29
重定向这么简单?我看网上的教程,修改的东西不少,原来是我想多了。

不同核心的单片机通常调用的stdio.h中定义的函数不同,比如51的跟ARM的就不太一样。只要打开stdio.h看看就知道用哪个函数实现重定向了。只要能实现一个字符的收发,就可以完成重定向的整个工作。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:如果你觉得我的分享或者答复还可以,请给我点赞,谢谢。

2045

主题

16350

帖子

222

粉丝
快速回复 在线客服 返回列表 返回顶部