在STM32中是不是只要初始化了USART之后,然后再加上#ifdef __GNUC__/* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf set to 'Yes') calls __io_putchar() */ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #define GETCHAR_PROTOTYPE int __io_getchar(FILE *f) #else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #define GETCHAR_PROTOTYPE int fgetc(FILE *f) #endif /* __GNUC__ */ 和下面这两个函数定义 PUTCHAR_PROTOTYPE { /* Place your implementation of fputc here */ /* e.g. write a character to the USART1 and Loop until the end of transmission */ HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF); return ch; } GETCHAR_PROTOTYPE { uint8_t ch = 0; HAL_UART_Receive(&huart1,&ch, 1, 0xffff); return ch; } 就可以用getchar 和printf到串口助手上去了啊?目前我可以实现printf的功能,但是getchar的功能还是不能实现。不知道哪里有问题?有大神知道的吗,指点一二吧,在线等。。。 |
谢谢我试试,但是我看见硬石里面写的是这样的
int fputc(int ch, FILE *f)
{
HAL_UART_Transmit(&husart_debug, (uint8_t *)&ch, 1, 0xffff);
return ch;
}
/**
* º¯Êý¹¦ÄÜ: Öض¨Ïòc¿âº¯Êýgetchar,scanfµ½DEBUG_USARTx
* ÊäÈë²ÎÊý: ÎÞ
* ·µ »Ø Öµ: ÎÞ
* ˵ Ã÷£ºÎÞ
*/
int fgetc(FILE * f)
{
uint8_t ch = 0;
HAL_UART_Receive(&husart_debug,&ch, 1, 0xffff);
return ch;
}
他也没有说把时间改小。卡死在getchar应该也不是,我在getchar下面写了printf函数,结果printf函数一直在发送数据
还有就是我把两个函数定义换成跟硬石里面一样的时候,发现printf函数也用不了了,我比较了不同的是第一个参数不同,我的地&huart1,硬石的是&huart_debug
大神我说错了,是在getchar卡死了,麻烦大神帮我分析一下可能是什么问题
这个用你之前能printf的husart,后面的0xFFFF改为1000
评分
查看全部评分
问题已解决,非常感谢。正是你说的那样改短时间就好了,膜拜。。。
评分
查看全部评分
谢谢,已经解决了,正是你说的那样
共同学习,这个STM32学习平台真的很好,会让人迷上STM32的