Obtenga más información sobre la impresión de puerto serie en un artículo

Tabla de contenido

01, impresión de hardware

02, impresión IDE

2.1 AR IAR

2.2 、 Keil


El artículo anterior " Explicación detallada del puerto serie STM32 " presentó el controlador del puerto serie. El puerto serie en el campo integrado no solo es una interfaz de comunicación, sino también una herramienta de depuración, y su facilidad de uso no es menor que la emulación de hardware. En algunos entornos, es inconveniente conectar Jlink para la simulación de hardware, o no es un problema necesario. Necesitamos localizar el problema y elegir la forma de guardar el registro, pero es necesario leerlo más tarde y está limitado por el tamaño. del Flash. Si puede colocar uno, es sin duda la mejor manera de utilizar el puerto serie para imprimir desde una computadora al sitio. En lenguaje C, la función printf genera varios tipos de datos, utiliza el control de formato para generar caracteres de varios longitudes e incluso salidas de varios patrones Es necesario conectar el puerto serie Redirect a la función printf.

01, impresión de hardware

En las aplicaciones STM32, a menudo redirigimos printf para imprimir la información a nuestro asistente de puerto serie. En el entorno MDK, a menudo utilizamos MicroLIB + fputc para realizar la función de impresión del puerto serie, a saber: reasignación del puerto serie

Recuerde agregar el archivo de encabezado al código

#include <stdio.h>

Compatible con la reasignación putchar de diferentes IDE.

#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)
#else
  #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */

Por supuesto, también debe configurar el puerto serie y no es necesario configurar las interrupciones.

void UART_Init(void)
{
  USART_InitTypeDef USART_InitStructure;
  GPIO_InitTypeDef GPIO_InitStructure;

  /* Enable GPIO clock */
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
  /* Enable UART1 clock */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
  /* Connect PXx to USARTx_Tx*/
  GPIO_PinAFConfig(GPIOA, 9, GPIO_AF_USART1);
  
  /* Connect PXx to USARTx_Rx*/
  GPIO_PinAFConfig(GPIOA, 10, GPIO_AF_USART1);
  
  /* Configure USART Tx as alternate function  */
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  
  /* Configure USART Rx as alternate function  */
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  
  USART_InitStructure.USART_BaudRate = 115200;
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  USART_InitStructure.USART_StopBits = USART_StopBits_1;
  USART_InitStructure.USART_Parity = USART_Parity_No;
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  
  /* USART configuration */
  USART_Init(USART1, &USART_InitStructure);
  
  /* Enable USART */
  USART_Cmd(USART1, ENABLE);
}

Función de impresión

PUTCHAR_PROTOTYPE
{
  /* Place your implementation of fputc here */
  /* e.g. write a character to the USART */
  USART_SendData(USART1, (uint8_t) ch);

  /* Loop until the end of transmission */
  while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
  {}

  return ch;
}

Deben configurarse diferentes IDE en consecuencia.

Configuración de Keil , debe marcar la opción MicroLIB.

Colocación IAR

Efecto de impresión

El código y la ingeniería son de código abierto

Dirección de código abierto del proyecto IAR Code y Keil:

https://github.com/strongercjd/STM32F207VCT6

 

02, impresión IDE

A veces, solo necesitamos depurar en la oficina, y el chip no tiene un puerto serial adicional que nos proporcione la depuración. También es una buena forma de usar IDE para imprimir.

2.1 AR IAR

el código se muestra a continuación

  printf("\r\n======================================================================");
  printf("\r\n=               (C) COPYRIGHT 2020                                   =");
  printf("\r\n=                                                                    =");
  printf("\r\n=                ST207 USART_Printf                                  =");
  printf("\r\n=                                                                    =");
  printf("\r\n=                                           By Firefly               =");
  printf("\r\n======================================================================");
  printf("\r\n\r\n");

Efecto de impresión IAR

Método de configuración, abra TerminalIO: ingrese depuración- > ver-> Terminal I / O

2.2 、 Keil

Todavía no he encontrado una solución. Se puede encontrar en Internet para verificar Usar simulador, pero esto es para depuración de simulación, no para depuración de hardware, y no cumple con mis requisitos.

Le invitamos a compartir sus propios métodos y contárselo en el área de comentarios.

Código y dirección de código abierto del proyecto IAR:

https://github.com/strongercjd/STM32F207VCT6

 

Haga clic para ver el álbum donde se encuentra este artículo, tutorial STM32F207

 

Preste atención a la cuenta oficial y reciba actualizaciones de artículos lo antes posible .

 

Supongo que te gusta

Origin blog.csdn.net/Firefly_cjd/article/details/109591747
Recomendado
Clasificación