KEIL5 里面实现printf的功能,需要修改一个函数

重写:fputc

  1. 包含头文件

在当前.c文件中包含这两个头文件

  1. 重写函数

首先从原理图判断单片机芯片与上位机(电脑)通信是通过那个串口,然后再配置对应的串口

void Usart1_Config(void)
{GPIO_InitTypeDef GPIO_InitStruct;USART_InitTypeDef USART_InitStruct;NVIC_InitTypeDef NVIC_InitStruct;//1,配置IO口模式RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽功能GPIO_InitStruct.GPIO_Pin=GPIO_Pin_9;//9号引脚GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;//速度最大GPIO_Init(GPIOA,&GPIO_InitStruct);GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN_FLOATING;//浮空输入GPIO_InitStruct.GPIO_Pin=GPIO_Pin_10;//10号引脚GPIO_Init(GPIOA,&GPIO_InitStruct);//配置串口模式//1,开串口1时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//2,配置串口1的模式USART_InitStruct.USART_BaudRate = 115200;//串口波特率USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//不适用硬件控制USART_InitStruct.USART_Mode = USART_Mode_Rx|USART_Mode_Tx;//开启发送和接收USART_InitStruct.USART_Parity = USART_Parity_No;//不使用奇偶校验USART_InitStruct.USART_StopBits = USART_StopBits_1;//1位停止位USART_InitStruct.USART_WordLength = USART_WordLength_8b;//8位字长USART_Init(USART1,&USART_InitStruct);//3,使能串口USART_Cmd(USART1, ENABLE);//中端配置//1,开启中断//开启接收中断USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启空闲中断USART_ITConfig(USART1, USART_IT_IDLE, ENABLE);//初始化中断//中断配置NVIC_InitStruct.NVIC_IRQChannel=USART1_IRQn;//串口的中断通道NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;//使能中断NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=0;//抢占优先级NVIC_InitStruct.NVIC_IRQChannelSubPriority=0;//响应优先级NVIC_Init(&NVIC_InitStruct);
  1. 中断服务函数(标识符命名有点不规范,大家不要学习)

//保存接收的数据
uint8_t recv_Data[256] = {0};
uint8_t recv_Flag=0;
uint8_t recv_Cnt=0;
//中断服务函数 12345678
void USART1_IRQHandler(void)
{uint8_t data = 0;//变量//接收数据中断 8次        读取SR的RXNEif(USART_GetITStatus(USART1, USART_IT_RXNE) == SET){//接收数据--读取USART->DR的数据,会清这个中断data = USART_ReceiveData(USART1);recv_Data[recv_Cnt++] = data;//数据先保存到数组内//清除接收中断   对SR的RXNE位 清0USART_ClearITPendingBit(USART1, USART_IT_RXNE);}//空闲中断 1次    读取SR的IDLEif(USART_GetITStatus(USART1,USART_IT_IDLE) == SET){recv_Flag = 1;//中断到了空闲,已经没有数据了,把寄存器内的数据 赋值到某个变量,叫读取//清除空闲中断data = USART1->SR;//先读SR,其实上面的USART_GetITStatus函数已经读取过一次,可以不写data = USART1->DR;//再读DR}
}
//串口发送字符
void USART1_SendChar(uint8_t p)
{//能不能在上个字符没有发完的时候,再去发送新的?等待数据发送完成while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);USART_SendData(USART1, p);
}//串口发送字符串
void USART1_SendStr(uint8_t *p)
{while(*p != '\0'){//能不能在上个字符没有发完的时候,再去发送新的?等待数据发送完成while(USART_GetFlagStatus(USART1,USART_FLAG_TC) == RESET);USART_SendData(USART1,*p);p++;}
}//这个函数不用声明,也不要调用
int fputc(int ch, FILE *f)
{USART1_SendChar(ch);return ch;
}
  1. 打开微库

软件KEIL串口应用-- printf调试相关推荐

  1. STM32 KEIL 串口打印printf使用详解

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

  2. keil中使用软件debug功能查看printf输出结果

    这是一条用处不大,但可能会用到的记录 参考连接:Keil Debug(printf) Viewer的使用 在纯软件仿真中,要想看到打印的debug信息,可以使用printf函数,但是需要用到函数重定向 ...

  3. C#串口上位机软件--IOT串口调试精灵

    最近用业余时间用C#写了一款适合自己目前岗位工作用的串口软件,"串口调试"板块的功能99.99%基本完成,后续会持续更新预留的功能或新增功能.欢迎下载使用本串口软件,"网 ...

  4. modbus串口调试助手 MODBUS调试 智能仪表通讯必备软件 RS485串口通讯

    modbus串口调试助手 MODBUS调试 智能仪表通讯必备软件 RS485串口通讯 自动生成CRC校验码 3个发送区 学习串口调试必备软件id=653678441225&

  5. STC15双串口printf调试输出案例

    STC15双串口printf调试输出案例 ✨本案例基于库函数开发,通过对库函数案例修改而来.如果所选单片机型号ROM比较小,那么就不要这么做.

  6. 如何调试上位机软件与串口进行通信

    为了在没有下位机连接的情况下调试上位机软件,看上位机软件是否能通过串口和下位机通信,以及通信的具体内容,下面给出解决方法: 1.下载"vspd虚拟串口" vspd虚拟串口软件是用来 ...

  7. Keil串口打印log显示乱码

    Keil串口打印log显示乱码原因分析及解决方案 背景 出错原因及解决方案 1. 波特率不正确 2. 编码格式不正确 3. 外部晶振不一致 小结 背景 使用GD32F450IIH6作为MCU时,外部晶 ...

  8. 设计printf调试宏

    设计printf调试宏:在调试时打印调试信息,而产品代码不显示调试信息. #define _DEBUG_ 0 #if _DEBUG_ #define ACCLOG(...) printf(__VA_A ...

  9. sscom串口网络数据调试器使用post方法向华为云obs桶上传文件和图片

    原贴地址:sscom串口网络数据调试器使用post方法向华为云obs桶上传文件和图片-云社区-华为云 [摘要] 之前发了文章"postman使用post方法向华为云obs桶上传文件和图片&q ...

最新文章

  1. selector与layer-list 单边框效果
  2. 1029 Median
  3. 检查Lync SRV记录是否正常
  4. 各种Oracle常见操作
  5. 单列表_正态分布检验(单样本K-S检验)
  6. MFC中CSliderCtrl的使用(收集)
  7. 肝了一个月,终于搞到了 30 页的 Python 进阶面试题
  8. Linux命令之文件处理
  9. Linux 系统管理员工具集
  10. 为什么知乎页面按Ctrl C 会自动粘贴一部份文字出来?
  11. 大规模部署桌面虚拟化时的问题
  12. andriod 自写的view 获得屏幕大小和 获得自写view大小的不同写法
  13. 天津理工大学计算机工程学院院长,王法玉
  14. cshop是什么开发语言_mes用什么语言开发?mes开发平台
  15. canvas 2.0
  16. Linux上查到目前透过FTP进来的使用者
  17. Cp与Cpk了解与计算
  18. 通过管道方式(CreatePipe)获取DOS命令行执行后的返回结果
  19. 【云速建站】域名配置指导
  20. C# Winform Socket即时通讯

热门文章

  1. 计算机毕业设计Python+django大学生闲置二手交易商城平台(源码+系统+mysql数据库+Lw文档)
  2. [绍棠] Vue中this.$nextTick()实现原理及使用场景学习总结
  3. pytorch波士顿房价预测模型
  4. grub引导项修复详解_重新安装win7后,修复Grub启动项
  5. python可以应用lbm_格子玻尔兹曼方法(LBM)python程序提速
  6. JQuery 大写输入提示
  7. 2016年第13本:新生--七年就是一辈子
  8. 微信小程序实现连接蓝牙设备跑步APP
  9. 2023跨境出海指南:美国网红营销白皮书
  10. 那些提升开发人员工作效率的在线工具