完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
引用正点原子的printf程序,串口1已正常配制了,发送接收数据正常,现想用printf信息,设置如下
#include "stdio.h"已在头文件中 //加入以下代码,支持printf函数,而不需要选择use MicroLIB #if 1 #pragma import(__use_no_semihosting) //标准库需要的支持函数 struct __FILE { int handle; /* Whatever you require here. If the only file you are using is */ /* standard output using printf() for debugging, no file handling */ /* is required. */ }; FILE __stdout; /* FILE is typedef’ d in stdio.h. */ _sys_exit(int x) //定义_sys_exit()以避免使用半主机模式 { x = x; } //重定向fputc函数 //printf的输出,指向fputc,由fputc输出到串口 //这里使用串口1(USART1)输出printf信息 int fputc(int ch, FILE *f) { while((USART1->SR&0X40)==0);//等待上一次串口数据发送完成 USART1->DR = (u8) ch; //写DR,串口1将发送数据 return ch; } #endif 在主函数里引用printf("OKn"); 程序会跑不起来,去掉这条运行正常,有人遇到同样的问题吗? |
|
相关推荐
7个回答
|
|
你在线看过吗?如果加上上面这句然后在线看程序连第一条都到不了,那么就是你在编译时,没有勾选Use MicroLIB
|
|
|
|
楼主,串口1用普通输出是否正常,如果可以,就是printf的重定向不对。
|
|
|
|
我复制一个能用的串口重映射printf函数给你看看。
int fputc(int ch,FILE *f) { USART_SendData(USART1, ch); while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET) { } return(ch); } 其中USART_SendData(USART1, ch);是库函数,如下: void USART_SendData(USART_TypeDef* USARTx, uint16_t Data) { /* Check the parameters */ assert_param(IS_USART_ALL_PERIPH(USARTx)); assert_param(IS_USART_DATA(Data)); /* Transmit Data */ USARTx->DR = (Data & (uint16_t)0x01FF); } 其中USART_GetFlagStatus(USART1, USART_FLAG_TC)是标准库的,代码如下: FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG) { FlagStatus bitstatus = RESET; /* Check the parameters */ assert_param(IS_USART_ALL_PERIPH(USARTx)); assert_param(IS_USART_FLAG(USART_FLAG)); /* The CTS flag is not available for UART4 and UART5 */ if (USART_FLAG == USART_FLAG_CTS) { assert_param(IS_USART_123_PERIPH(USARTx)); } if ((USARTx->SR & USART_FLAG) != (uint16_t)RESET) { bitstatus = SET; } else { bitstatus = RESET; } return bitstatus; } 自己看看。代码虽然多了很多,但是是一个能打印的函数。在精简代码过程中,想想哪些能省,哪些不能省。 还有,最好先确定你的串口配置正确,也就是能发送正常。 |
|
|
|
学习一下
|
|
|
|
|
|
楼主问题解决了么?
|
|
|
|
学习了
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1378 浏览 1 评论
1117 浏览 1 评论
MCU友好过渡MPU,米尔基于STM32MP135开发板裸机开发应用笔记
647 浏览 0 评论
自定义系统时钟频率后,用库函数和微带两种方式点亮LED灯,为什么灯的闪烁频率不一致?
1647 浏览 2 评论
1878 浏览 2 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-27 08:19 , Processed in 0.591781 second(s), Total 74, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号