Cómo utilizar la función printf en la programación stm32
Hay dos métodos de configuración:
1. Configure las propiedades del proyecto. Los pasos detallados son los siguientes
1. (archivo de encabezado de entrada y salida estándar).
2. Redefina la función en el archivo principal de la siguiente manera:
//Enviar datos
int fputc(int ch, FILE *f)
{
USART_SendData(USART1, (unsigned char) ch);//USART1 puede ser reemplazado por USART2, etc.
mientras (!(USART1->SR & USART_FLAG_TXE));
return (ch);
}
//Recibir datos
int GetKey (void) { p>
mientras (!(USART1->SR & USART_FLAG_RXNE));
retorno ((int)(USART1->DR & 0x1FF));
} p>
De esta manera, cuando se usa printf, se llamará a la función fputc personalizada para enviar caracteres.
3. Marque "Usar MicroLIB" en la opción "Destino" -> "Generación de código" de las propiedades del proyecto.
MicroLIB es la biblioteca de respaldo del C predeterminado. infórmese Conéctese en línea para encontrar información detallada.
La configuración ahora está completa y puede usar printf para enviar datos al puerto serie en el proyecto.
2. El segundo método es agregar el archivo "Regtarge.c" al proyecto.
1 Incluir el archivo "stdio.h" en el archivo principal.
2. Cree un archivo en el proyecto y guárdelo como Regtarge.c, y luego agréguelo al proyecto
Ingrese el siguiente contenido en el archivo (simplemente cópielo directamente)
#include
#include
#pragma import(__use_no_semihosting_swi)
extern int SendChar(int ch); // Declarar funciones externas y definirlas en el archivo principal
extern int GetKey(void);
struct __FILE {
int handle; // Agrega lo que necesites aquí
};
ARCHIVO __stdout;
ARCHIVO __stdin;
int fputc(int ch, ARCHIVO *f) {
retorno (SendChar(ch));
}
int fgetc(FILE *f) {
return (SendChar(GetKey()));
} p>
void _ttywrch(int ch) {
SendChar (ch);
}
int ferror(ARCHIVO *f) { // Su implementación de ferror
return EOF;
}
void _sys_exit(int return_code) {
label : ir a etiqueta; // bucle sin fin
}
3. Agregue y defina las dos funciones siguientes en el archivo principal
int SendChar (int ch) {
while (!(USART1->SR & USART_FLAG_TXE)); // USART1 puede ser reemplazado por el puerto serie utilizado para la comunicación en su programa
USART1->DR = (ch & 0x1FF);
return (ch);
}
int GetKey (void) {
mientras (!(USART1- >SR & USART_FLAG_RXNE));
return ((int)(USART1->DR & 0x1FF));
}
La configuración ahora está completa y puedes usar printf libremente en el archivo principal.