STM32: redireciona as funções prinft e getchar, mas há um problema ao usar a porta serial do processo

No aprendizado do STM32, com certeza aprenderemos o uso das portas seriais. Com relação ao recebimento e envio de dados seriais, podemos realmente usar a função printf () e a função getchar () para simplificar a transmissão. Precisamos apenas de um trabalho preliminar simples.

Na biblioteca padrão da linguagem C, a função fputc é uma função dentro da função printf. Sua função é escrever o caractere ch na posição atual do ponteiro de gravação do arquivo apontado pelo ponteiro do arquivo f. O entendimento simples é escrever o caractere para um arquivo específico. Usamos a função USART para modificar novamente o conteúdo da função fputc para obter uma função semelhante a "escrever".

A função fgetc é muito semelhanteàfunção fputc , que implementa a função de leitura de caracteres. Você precisa prestar atenção ao formato de entrada de caracteres ao usar a função scanf.

Só mais uma coisa a notar é que usar as fput e fgetc funções para redirecionar as funções de entrada e saída da biblioteca padrão de linguagem C, você deve verificar " Use MicroLIB " na opção de projeto MDK . MicoroLIB é uma biblioteca alternativa para o padrão C A biblioteca C padrão é altamente otimizada para fazer menos código e ocupar menos recursos. Para usar as funções printf e scanf , o arquivo de cabeçalho stdio.h precisa ser incluído no arquivo

código mostrado como abaixo:

/*重定向c库函数printf到串口,重定向后可使用printf函数*/
int fputc(int ch, FILE *f)
{
    
    
		/* 发送一个字节数据到串口 */
		USART_SendData(DEBUG_USARTx, (uint8_t) ch);
		//DEBUG_USARTx改成你想用的USART端口
		/* 等待发送完毕 */
		while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_TXE) == RESET);		
		//DEBUG_USARTx改成你想用的USART端口
		return (ch);
}

///重定向c库函数scanf到串口,重写向后可使用scanf、getchar等函数
int fgetc(FILE *f)
{
    
    
		/* 等待串口输入数据 */
		while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_RXNE) == RESET);
		//DEBUG_USARTx改成你想用的USART端口
		return (int)USART_ReceiveData(DEBUG_USARTx);
		//DEBUG_USARTx改成你想用的USART端口
}

Se você estiver usando a biblioteca de firmware STM32, deve ser capaz de copiar e colar diretamente, basta alterar DEBUG_USARTx. Se você for outra pessoa, basta substituir as funções de envio e recebimento nessas duas partes do código por suas próprias funções.

Claro, alguns amigos descobrirão que podem cometer erros ao redirecionar e não alcançar os resultados esperados. (Exclua a possibilidade de sua função de redirecionamento estar errada)

Primeiro, lembre-se de incluir o arquivo de cabeçalho #include <stdio.h>

Em segundo lugar, se você estiver usando KEIL, você também precisa configurar algo

Clique nesta varinha mágica, entre na página de configurações
Insira a descrição da imagem aqui
e clique em Usar MicroLIB

Insira a descrição da imagem aqui

Se você geralmente prestar atenção a esses dois pontos, poderá obter o redirecionamento com êxito. Se tiver outras perguntas, entre em contato conosco.

Acho que você gosta

Origin blog.csdn.net/qq_45689790/article/details/113634695
Recomendado
Clasificación