我注意到 STM32F407-DISC 项目(通过 STM32CubeIDE 制作)的
syscalls.c
文件具有 __io_putchar()
和 __io_getchar()
作为外部文件。这是
syscalls.c
文件中的内容:
extern int __io_putchar(int ch) __attribute__((weak));
extern int __io_getchar(void) __attribute__((weak));
有谁知道这些外部人员从哪个文件中提取?
提前致谢!
它们在标准库中。所以你的项目中没有代码。您需要下载(克隆)STMCubeIDE工具链使用的标准库实现的源代码。
只需编写您自己的,它们就会用弱链接替换那些。
您可以根据需要实现它们,让我向您展示我的示例实现。当然,USART 必须先初始化。我用的是1.5M波特率,所以速度相当快,程序长时间不阻塞。
int __io_putchar(int ch) {
// Code to write character 'ch' on the UART
while(!(USART3->ISR & USART_ISR_TXE));
USART3->TDR = ch;
return ch; // On success, the character written is returned.
// If a writing error occurs, EOF is returned and the error indicator (ferror) is set.
}
int __io_getchar(void) {
// Code to read a character from the UART
// timeout version:
// uint32_t = 0;
// while((!(USART3->ISR & USART_ISR_RXNE)) && --t);
// if (!t) return EOF;
// blocking read version:
while(!(USART3->ISR & USART_ISR_RXNE));
return USART3->RDR;
}