软件KEIL串口应用-- printf调试
KEIL5 里面实现printf的功能,需要修改一个函数
重写:fputc
包含头文件
在当前.c文件中包含这两个头文件
![](/assets/blank.gif)
重写函数
首先从原理图判断单片机芯片与上位机(电脑)通信是通过那个串口,然后再配置对应的串口
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);
中断服务函数(标识符命名有点不规范,大家不要学习)
//保存接收的数据
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;
}
打开微库
![](/assets/blank.gif)
软件KEIL串口应用-- printf调试相关推荐
- STM32 KEIL 串口打印printf使用详解
常规打印方法 在STM32的应用中,我们常常对printf进行重定向的方式来把打印信息printf到我们的串口助手. 在MDK环境中,我们常常使用MicroLIB+fputc的方式实现串口打印功能,即 ...
- keil中使用软件debug功能查看printf输出结果
这是一条用处不大,但可能会用到的记录 参考连接:Keil Debug(printf) Viewer的使用 在纯软件仿真中,要想看到打印的debug信息,可以使用printf函数,但是需要用到函数重定向 ...
- C#串口上位机软件--IOT串口调试精灵
最近用业余时间用C#写了一款适合自己目前岗位工作用的串口软件,"串口调试"板块的功能99.99%基本完成,后续会持续更新预留的功能或新增功能.欢迎下载使用本串口软件,"网 ...
- modbus串口调试助手 MODBUS调试 智能仪表通讯必备软件 RS485串口通讯
modbus串口调试助手 MODBUS调试 智能仪表通讯必备软件 RS485串口通讯 自动生成CRC校验码 3个发送区 学习串口调试必备软件id=653678441225&
- STC15双串口printf调试输出案例
STC15双串口printf调试输出案例 ✨本案例基于库函数开发,通过对库函数案例修改而来.如果所选单片机型号ROM比较小,那么就不要这么做.
- 如何调试上位机软件与串口进行通信
为了在没有下位机连接的情况下调试上位机软件,看上位机软件是否能通过串口和下位机通信,以及通信的具体内容,下面给出解决方法: 1.下载"vspd虚拟串口" vspd虚拟串口软件是用来 ...
- Keil串口打印log显示乱码
Keil串口打印log显示乱码原因分析及解决方案 背景 出错原因及解决方案 1. 波特率不正确 2. 编码格式不正确 3. 外部晶振不一致 小结 背景 使用GD32F450IIH6作为MCU时,外部晶 ...
- 设计printf调试宏
设计printf调试宏:在调试时打印调试信息,而产品代码不显示调试信息. #define _DEBUG_ 0 #if _DEBUG_ #define ACCLOG(...) printf(__VA_A ...
- sscom串口网络数据调试器使用post方法向华为云obs桶上传文件和图片
原贴地址:sscom串口网络数据调试器使用post方法向华为云obs桶上传文件和图片-云社区-华为云 [摘要] 之前发了文章"postman使用post方法向华为云obs桶上传文件和图片&q ...
最新文章
- selector与layer-list 单边框效果
- 1029 Median
- 检查Lync SRV记录是否正常
- 各种Oracle常见操作
- 单列表_正态分布检验(单样本K-S检验)
- MFC中CSliderCtrl的使用(收集)
- 肝了一个月,终于搞到了 30 页的 Python 进阶面试题
- Linux命令之文件处理
- Linux 系统管理员工具集
- 为什么知乎页面按Ctrl C 会自动粘贴一部份文字出来?
- 大规模部署桌面虚拟化时的问题
- andriod 自写的view 获得屏幕大小和 获得自写view大小的不同写法
- 天津理工大学计算机工程学院院长,王法玉
- cshop是什么开发语言_mes用什么语言开发?mes开发平台
- canvas 2.0
- Linux上查到目前透过FTP进来的使用者
- Cp与Cpk了解与计算
- 通过管道方式(CreatePipe)获取DOS命令行执行后的返回结果
- 【云速建站】域名配置指导
- C# Winform Socket即时通讯
热门文章
- 计算机毕业设计Python+django大学生闲置二手交易商城平台(源码+系统+mysql数据库+Lw文档)
- [绍棠] Vue中this.$nextTick()实现原理及使用场景学习总结
- pytorch波士顿房价预测模型
- grub引导项修复详解_重新安装win7后,修复Grub启动项
- python可以应用lbm_格子玻尔兹曼方法(LBM)python程序提速
- JQuery 大写输入提示
- 2016年第13本:新生--七年就是一辈子
- 微信小程序实现连接蓝牙设备跑步APP
- 2023跨境出海指南:美国网红营销白皮书
- 那些提升开发人员工作效率的在线工具