关于STM32串口通信使用printf发送数据的配置方法

开发环境:keil rvmdk
在stm32串口通信程序中使用printf发送数据,非常的方便。可在刚开始使用的时候总是遇到问题,常见的是硬件访真时无法进入main主函数,其实只要简单的配置一下就可以了。
下面就说一下使用printf需要做哪些配置。
有两种配置方法:
一、对工程属性进行配置,详细步骤如下
1、首先要在你的main 文件中 包含“stdio.h” (标准输入输出头文件)。
2、在main文件中重定义函数。如下:
// 发送数据
int fputc(int ch, file *f)
{
usart_senddata(usart1, (unsigned char) ch);// usart1 可以换成 usart2 等
while (!(usart1->sr & usart_flag_txe));
return (ch);
}
// 接收数据
int getkey (void)
{
while (!(usart1->sr & usart_flag_rxne));
return ((int)(usart1->dr & 0x1ff));
}
这样在使用printf时就会调用自定义的fputc函数,来发送字符。
3、在工程属性的 “target -> code generation 选项中勾选 use microlib
microlib 是缺省c的备份库,关于它可以到网上查找详细资料。
二、第二种方法是在工程中添加“regtarge.c”文件
1、在main文件中包含 “stdio.h” 文件
2、在工程中创建一个文件保存为 regtarge.c , 然后将其添加工程中在文件中输入如下内容(直接复制即可)
#include
#include
#pragma import(__use_no_semihosting_swi)
extern int sendchar(int ch); // 声明外部函数,在main文件中定义
extern int getkey(void);
struct __file {
int handle; // add whatever you need here
};
file __stdout;
file __stdin;
int fputc(int ch, file *f) {
return (sendchar(ch));
}
int fgetc(file *f) {
return (sendchar(getkey()));
}
void _ttywrch(int ch) {
sendchar (ch);
}
int ferror(file *f) { // your implementation of ferror
return eof;
}
void _sys_exit(int return_code) {
label: goto label; // endless loop
}
3、在main文件中添加定义以下两个函数
int sendchar (int ch) {
while (!(usart1->sr & usart_flag_txe)); // usart1 可换成你程序中通信的串口
usart1->dr = (ch & 0x1ff);
return (ch);
}
int getkey (void) {
while (!(usart1->sr & usart_flag_rxne));
return ((int)(usart1->dr & 0x1ff));
}
至此完成配置,可以在main文件中随意使用 printf 。
stm32单片机中文官网
意法半导体/st/stm

新唐科技M031LE3AE控制器介绍
点成分享 | 血常规的创新式检测——由QBC干式血液分析仪完成
电动立式推拉力机有哪些生产厂商?
北科天绘跻身2022中国车载激光雷达企业市场竞争力TOP10榜单
中微电携自研GPU产品亮相ELEXCON深圳国际电子展
关于STM32串口通信使用printf发送数据的配置方法
通用抢先福特部署商业化自动驾驶打车服务,2019年商用
深入探讨在FPGA设计中要避免的10大错误
pcba工厂里的呆滞拆机料都流向了哪里呢?
病害肉检测仪器的相关功能介绍
weblogic修改数据源需要重启吗
混合式调度器C51源代码
怎样防止电线短路?防止电气线路短路的几点措施
适应多种时序的DMA控制器设计
谷歌宣布针对Chrome扩展程序的重大隐私政策更新 1月正式上线
英国开发出太阳能HAPS无人机
SMT贴片厂是怎样清除SMT贴片上的多余锡膏的?
网站安全公司waf防火墙的基本概念介绍
德州仪器Meta Watch可穿戴蓝牙智能手表开发系统设计
加密芯片的功能/原理/选型