Red de conocimiento informático - Conocimiento del nombre de dominio - Cómo usar stm32cubemx para configurar los parámetros de la pantalla oled

Cómo usar stm32cubemx para configurar los parámetros de la pantalla oled

Proceso de configuración detallado:

1. Abra STM32CubeMX y seleccione el chip correspondiente. El chip en este artículo es STM32F207VCT6, como se muestra a continuación después de la selección:

2. Configure el reloj RCC, ETH, PA8 y habilite LWIP

Desde el hardware de nuestra placa de desarrollo aquí; es el modo RMII, así que elija ETH-RMII. Si su placa de desarrollo está en modo MII, consulte el método de configuración MII. Esto es solo para RMII;

RCC selecciona la fuente de reloj externo y también verifica. MCO1, el software PA8 se configurará automáticamente en el modo MCO1. Este pin es muy importante para el modo RMII y se utiliza para proporcionar un reloj de 50 MHz para el chip PHY;

Habilite LWIP;

. 3. Árbol de reloj Para la configuración relacionada, es necesario asegurarse de que la salida MCO1 sea de 50 Mhz. Si la frecuencia es incorrecta, el chip PHY no funcionará;

Porque el chip aquí es 207VCT6, para poder hacerlo. Para hacer que la salida de MCO1 sea de 50 Mhz, he realizado algunos parámetros de multiplicación de frecuencia de PLL. El ajuste es generalmente el siguiente: (Los camaradas pueden configurar de manera flexible de acuerdo con sus propios chips al configurar, pero deben asegurarse de que la salida de MCO1 sea de 50 Mhz). /p>

4. Configuración de parámetros relacionados con ETH, LWIP y RCC;

En este punto, las cosas más importantes están al frente, pero todavía hay una cosa que debe pagarse. atención a, es decir, la velocidad de salida del pin PA8. Varios intentos fallidos se debieron a no prestar atención a este pin.

Las configuraciones de parámetros posteriores se pueden configurar según sus propias necesidades. Aquí están mis configuraciones como referencia.

Mantenga los parámetros ETH como predeterminados, pero marque el botón de interrupción;

p>

Los parámetros LWIP se configuran de la siguiente manera: (Debido a que estoy configurando el servidor UDP aquí, la IP se asigna estáticamente)

5. ;

El proyecto generado agrega la inicialización del servidor UDP y el enlace de puertos y otras funciones relacionadas;

Agrego directamente el archivo del servidor UDP en la rutina oficial anterior, de la siguiente manera:

Después, agregue el archivo .c al programa de usuario y agregue el archivo de encabezado .h de Udp a la función principal de la siguiente manera: (El contenido específico del archivo udp se proporcionará más adelante)

<; p>6. La función principal también necesita agregar algunas funciones. Aquí no explicaremos las funciones y los principios de implementación, solo agregaremos explicaciones.

Adjunto: contenido del archivo relacionado con udp_echoserver (este archivo es un programa de muestra oficial, los derechos de autor pertenecen al funcionario y se reproduce aquí)

El contenido de udp_echoserver.c es el siguiente :

/* Incluye --------------------------------------- --------- ---------------------*/

#include "main.h"

#include "lwip/pbuf .h"

#include "lwip/udp.h"

#include "lwip/tcp.h"

#include lt; string.hgt;

#include lt;stdio.hgt;

/* Typedef privado --------------- ----------- ----------------------------------*/

/* Definición privada -- ---------------------------------------- ---------- --------*/

#define UDP_SERVER_PORT 7 /* define el puerto de conexión local UDP */

#define UDP_CLIENT_PORT 7 /* define el puerto de conexión remota UDP */

/* Macro privada --------------------- ---------- -----------------*/

/* Variables privadas - ------------ -------------------------------------- ------------*/

/* Prototipos de funciones privadas ------------------------ --------------------- -----*/

void udp_echoserver_receive_callback(void *arg, struct udp_pcb *upcb, struct pbuf * p, const ip_addr_t *addr, u16_t port);

/* Funciones privadas ---------------------- ---------------------- --------*/

/**

* @brief Inicializa la aplicación del servidor.

* @param Ninguno

* @retval Ninguno

*/

void udp_echoserver_init(void)

{

struct udp_pcb *upcb;

p>

err_t err;

/* Crear un nuevo control UDP

ol block */

upcb = udp_new();

if (upcb)

{

/* Vincula el upcb al Puerto UDP_PORT */

/* El uso de IP_ADDR_ANY permite que la upcb sea utilizada por cualquier interfaz local */

err = udp_bind(upcb, IP_ADDR_ANY, UDP_SERVER_PORT);

if(err == ERR_OK)

{

/* Establecer una devolución de llamada de recepción para upcb */

udp_recv(upcb, udp_echoserver_receive_callback, NULL) ;

}

}

}

/**

* @brief Esta función se llama cuando se ha recibido un datagrm UDP en el puerto UDP_PORT.

* @param arg argumento proporcionado por el usuario (udp_pcb.recv_arg)

* @param pcb el udp_pcb que recibió los datos

* @param p el búfer del paquete que se recibió

* @param addr la dirección IP remota desde la cual se recibió el paquete

* @param port el puerto remoto desde donde el paquete fue recibido

* @retval Ninguno

*/

void udp_echoserver_receive_callback(void *arg, struct udp_pcb *upcb, struct pbuf *p, const ip_addr_t *addr, puerto u16_t)

{

/* Conectarse al cliente remoto */

udp_connect(upcb, addr, UDP_CLIENT_PORT);

/* Decirle al cliente que lo hemos aceptado */

udp_send(upcb, p);

/* libera la conexión UDP, para que podamos aceptar nuevos clientes * /

udp_disconnect(upcb);

/* Liberar el buffer p */

pbuf_free(p);

>

}

El contenido de udp_echoserver.h es el siguiente:

#ifndef __ECHO_H__

#define __ECHO_H__

void udp_echoserver_init(void);

#endif /* __MINIMAL_ECHO_H */

7. En este punto, todo el trabajo está completo, compila el proyecto y descárgalo a la placa de desarrollo. Dado que el número de puerto vinculado en udp_echoserver es 7, aquí utilizamos la herramienta de prueba para probar el funcionamiento de la red.