您的位置 首页 基础

STM32程序增加printf函数后无法运转的解决方法(串口试验)

标准库函数的默认输出设备是显示器,要实现在串口或LCD输出,必须重定义标准库函数里调用的与输出设备相关的函数.例如:printf输出到串口,…

规范库函数的默许输出设备是显示器,要实现在串口或LCD输出,有必要重界说规范库函数里调用的与输出设备相关的函数.

例如:printf输出到串口,需求将fputc里边的输出指向串口(重定向),办法如下:#ifdef __GNUC__#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)#else#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)#endifPUTCHAR_PROTOTYPE{USART_SendData(USART1, (uint8_t) ch);while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);return ch;}因printf()之类的函数,运用了半主机形式。运用规范库会导致程序无法运转,以下是解决办法:办法1.运用微库,由于运用微库的话,不会运用半主机形式.

办法2.依然运用规范库,在主程序增加下面代码:

#pragma import(__use_no_semihosting)
_sys_exit(int x)
{
x = x;
}
struct __FILE
{
int handle;

};

FILE __stdout;
另一个高手的解说
刚开始学stm32,顺着gpio、uart。。。的次序渐渐爬
初始化的办法学习了马教师的STM32_Init.h****,自己英文还能够,加上avr的根底还不错,所以gpio和时钟装备都很顺畅
碰到uart就头大了,看到各种例程里都是printf()函数,自己也想用,毕竟是avr想用却开支不了的东西。可是我自己写的程序里一旦呈现printf,单片机的不干活了。查论坛首要发现要重界说fputc函数,照做了,仍是不可。
后来怀疑是uart1初始化问题,用自己写的put_c函数却没问题。
后来又发现一种说法,需求防止运用semihosting(半主机形式),我也把代码加进去了(改fputc去掉了),仍是不可。
再一想,重界说fputc是肯定有必要的,加上了之后问题解决,成功运用printf(“(灵敏词0373) \n”);输出了,哈哈
***************************************************************************************************

以上废话,能够不看。
简略地说:想在mdk 3.80a顶用printf,需求一起重界说fputc函数和防止运用semihosting(半主机形式),
论坛里应该有完好介绍这个的帖子,可是我没搜到,也许是沉了。重发出来希望能帮上像我这样的菜鸟们。

需求增加以下代码

#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 is typedef’ d in stdio.h. */
FILE __stdout;

///

/// 界说_sys_exit()以防止运用半主机形式
///

/// ///
_sys_exit(int x)
{
x = x;
}

int fputc(int ch, FILE *f)
{
//USART_SendData(USART1, (u8) ch);
USART1->DR = (u8) ch;

/* Loop until the end of transmission */
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
{
}

return ch;
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/jichu/274915.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部