scanf会调用C库中的fgetc函数
printf 会调用C库中的fput函数
需要将输入输出重新定向
scanf是将fgetc的返回值放到数组buf中,且c库中fgetc和fputc函数前面带有weak(虚弱)
所以自己定义的fgetc和fputc函数的优先级大于库函数。优先调用自己封装的函数
封装函数代码:
int fgetc(FILE *f)
{
uint8_t ch;
while(!(USART1->ISR & 1<<5)){}
ch = USART1->RDR;
return ch;
}
int fputc(int ch,FILE *f)
{
while(!(USART1->ISR & 1<<7)){};
USART1->TDR=ch;
return ch;
}
void send(uint8_t ch)
{
while(!(USART1->ISR & 1<<7)){}
USART1->TDR = ch;
}
main 函数:
int main()
{
scanf("%s",ch);
printf("%s\n",ch);
可用printf或者用寄存器发送 如下:
for(i=0;i<strlen(ch);i++)//循环发送
{
send(ch[i]);
}
send(ch_1);
HAL_Delay(300);
}