MDK中STM32程序无法printf给串口

2019-07-21 01:44发布

问题1:(与编译器无关)在程序中加入printf语句实现串口的输出,但未写重定向函数fputc 解决方法:int  fputc(int  ch, FILE  *f) {                   USART_SendData(USART1,(uint8_t)  ch);                   while  (USART_GetFlagStatus(USART1, USART_FLAG_TC)  == RESET )                  {}                  return ch;              }   问题2(与编译软件有关):fputc编写无误,使用的是MDK4.22-3.40之间的编译环境,未使用微型库(MicroLIB), 因为printf()之类的函数,使用了半主机模式。使用微型库的话,不会使用半主机模式,所以就没有问题。 解决方法:在Option中勾上MicroLIB,重新编译   问题3:fputc编写无误,不用微库,依然可以使用printf 解决方法:在程序中加入下列程序 #pragma import(__use_no_semihosting) 
_sys_exit(int x) 

x = x; 

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; 问题4:不想修改程序 解决方法:使用3.4以下版本
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。