STM32/GD32-Studienhandbuch – Betreten der Grube (4) GPIO als einfaches IO, Vorsichtsmaßnahmen für den Anfangszustand bei Konfiguration als Ausgabemodus

Unabhängig davon, ob es sich um GD32 oder STM32 handelt, wenn GPIO als Ausgabemodus konfiguriert ist, gibt es nach Abschluss der Initialisierung einen anfänglichen Ausgabestatus. Einige können einen hohen Pegel haben, andere einen niedrigen Pegel Zeit nach der Initialisierung Die Ausgabe des momentanen Signals mit steigender oder fallender Flanke führt bei einigen Peripheriegeräten usw. zu unerwarteten Vorgängen.

Zum Beispiel der folgende GPIO-Initialisierungsoperationscode

Wenn bei der Initialisierung nur die Takt- und Ausgangsparameter konfiguriert werden, verwenden Sie ein Oszilloskop, um die Wellenform anzuzeigen. Zum Zeitpunkt der Initialisierung liegt ein niedriger Pegel von 2 ms vor, der dann auf einen hohen Pegel wechselt. Wenn ein Peripheriegerät an den GPIO angeschlossen ist und Der Pegel ist niedrig oder wenn die fallende Flanke zurückgesetzt wird, ist es sehr wahrscheinlich, dass das Peripheriegerät zurückgesetzt wird.

/**
  *功能:初始化GPIO参数
  *入参1:GPIO号
  *返回值:无
  */
void gd_gpio_init (uint32_t gpioNum, uint32_t gpio_mode, uint32_t gpio_pupd)
{
    /* 初始化GPIO时钟 */
    rcu_periph_clock_enable(GPIO_CLK[gpioNum]);

    /* 配置GPIO模式和输出选项 */ 
    gpio_mode_set(GPIO_PORT[gpioNum], gpio_mode, gpio_pupd,GPIO_PIN[gpioNum]);
    gpio_output_options_set(GPIO_PORT[gpioNum], GPIO_OTYPE_PP,                   
          GPIO_OSPEED_50MHZ,GPIO_PIN[gpioNum]);
}

 Wenn alle GPIOs als Ausgabemodus konfiguriert sind, muss nach der Initialisierung ein bestimmter Ausgabestatus angegeben werden, GPIO_BOP wird auf hoch gesetzt und GPIO_BC wird auf niedrig gesetzt

/**
  *功能:GPIO输出置1
  *入参1:GPIO号
  *返回值:无
  */
void gd_gpio_on(uint32_t gpioNum)
{
    GPIO_BOP(GPIO_PORT[gpioNum]) = GPIO_PIN[gpioNum];
}

/**
  *功能:GPIO输出置0
  *入参1:GPIO号
  *返回值:无
  */
void gd_gpio_off(uint32_t gpioNum)
{
    GPIO_BC(GPIO_PORT[gpioNum]) = GPIO_PIN[gpioNum];
}

Habe auch Folgendes probiert:

Bevor Sie den Code initialisieren, setzen Sie zuerst das GPIO-Ausgangsregister auf hoch, initialisieren Sie dann den GPIO und messen Sie ihn mit einem Oszilloskop. Die Low-Level-Zeit hat sich von 2 ms auf 1 ms geändert und die Zeit verkürzt. Die entsprechenden Peripheriegeräte sind dies tatsächlich nicht zurückgesetzt, aber immer noch riskant

Daher wird empfohlen, die Reset-Funktion zu verwenden und sie dann zu initialisieren, wenn Sie den GPIO nicht mit einem Low-Level-Reset der Peripheriegeräte zurücksetzen möchten und nach dem Einschalten nicht erneut zurückgesetzt werden möchten , dann über GPIO_BC auf niedrig setzen und dann verzögern, nicht einschalten. Initialisieren Sie einfach den entsprechenden GPIO

Guess you like

Origin blog.csdn.net/qq_38584212/article/details/132271658