【基于GCC】STM32的printf函数重定向+Linux下串⼝调试助⼿
引⾔
在Linux上学习STM32有⼀段时间了,其中困扰我的就是在Linux系统上的串⼝调试助⼿和USART这节的重定向c库函数printf到串⼝了。(因为我⽤的是)
串⼝⽅⾯曾⽤过minicom,但感觉不是太⽅便,⼜因为运⾏minicom后,使⽤下载程序失败,内⼼就开始厌烦minicom了,于是开始在各⼤论坛查询其他的串⼝调试助⼿,终于让我给到了,继⽽内⼼也舒畅了。
在⼀次偶然下重定义printf函数也到了解决办法。
⼀、安装 Comtool
这款串⼝调试软件是Python开发的,需要下载下列软件:Python3、python-pip
安装Pythoh3
sudo pacman -S python3
安装python-pip
sudo pacman -S python-pip
安装Comtool
sudo pip3 install comtool
此时Comtool已经安装成功了,我的系统为Manjaro
运⾏此软件只需中端输⼊:sudo comtool即可
打开之后页⾯如下:
右上⾓调整字符编码,我采⽤的是UTF-8
左边设置传输参数,右边为接收和发送栏,具体的⾃⾏了解。
⼆、重定向c库函数printf到串⼝
添加_write函数
在keil借助的是fputc函数,⽽gcc⽤fputc就不⾏了,需要⽤_write函数,函数原型如下:
int _write (int fd, char *pBuffer, int size)
{
for(int i =0; i < size; i++)
linux重定向{
while((USART1->SR&0X40)==0);//等待上⼀次串⼝数据发送完成        USART1->DR =(uint8_t) pBuffer[i];      //写DR,串⼝1将发送数据}
return size;
}
把_write函数加到程序中
添加编译命令
添加_write函数后,还必须添加gcc编译命令:
--specs=nano.specs --specs=nosys.specs
上⾯两步完成后就可以使⽤printf函数了
三、打印浮点数
在你写代码中,你会发现printf函数⽆法打印%f
⽅法⼀:添加编译选项
在 Makefile 的 LDFLAGS 编译选项中添加以下指令:LDFLAGS +=-lc -lrdimon -u _printf_float
重新编译、下载即可打印浮点数
⽅法⼆:扩⼤浮点数,然后再打印的
//打印浮点数
void Print_Float(float Vaule)
{
int integer,decimal_1,decimal_2,decimal_3;
integer =(int)Vaule;//提取整数部分
decimal_1 =(int)((Vaule-integer)*10)%10;//⼩数点后第⼀位
decimal_2 =(int)((Vaule-integer)*100)%10;//⼩数点后第⼆位
decimal_3 =(int)((Vaule-integer)*1000)%10;//⼩数点后第⼆位
printf("%d.%d%d%d",integer,decimal_1,decimal_2,decimal_3);
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。