GD32F10x的PA0與待機喚醒


這個‘隨筆’來自公司一款成熟產品的BUG,它生產有6年左右了,最近改用GD32的對應型,有

GD32F(M3)和GD32E(M4),我們產品在STM32和GD32E通過PA0進入睡眠,再通過PA0喚

醒起來,能正常工作並測試良好!

 

但是在GD32F上,發現能進入睡眠,但是PA0喚醒不了CPU,為此用GD的固件庫,獨立測試

一下這個功能,      部份代碼如下:

/*
    【--利用PA0,喚醒GD32的測試--】
    Firmware_Library_V2.1.2\Firmware\CMSIS下少文件,
    可在之前的版本復制過來,進行使用

    GD32發布的固件庫V2.1.2有少文件現象,無語了!!!
    
 */
#include "main.h"
int main(void)
{    
    gd_eval_com_init(USART0); //初始化串口0
    printf("\r\n\r\n\r\nWAKEup PA0 TEST!\r\n");  //測試信息  
    
    gd_eval_key_init(KEY_TAMPER, KEY_MODE_GPIO); // PA0初化為普通按鍵KEY功能   
    led_config();   /*  LED燈配置,RB8燈 */    
    
    long cont;//計數器 
    while(1){
      
        if(SET == gpio_input_bit_get(TAMPER_KEY_GPIO_PORT, TAMPER_KEY_PIN))// PA0為高電平,進入待機模式
        {
            printf("sleep\r\n");
            gd_eval_led_off(LED2); // RB8燈滅
            gd_eval_key_init(KEY_WAKEUP, KEY_MODE_EXTI);/* PA0腳重新初始化為PMU,外部中斷喚醒功能 */
            rcu_periph_clock_enable(RCU_PMU);           /* 啟用外圍設備PMU時鍾 */
            
            pmu_wakeup_pin_enable();                    /* 使能PA0喚醒 */
            pmu_to_standbymode(WFI_CMD);                /* 進入待機模式,等待PA0出現上升沿,程序會從MAIN()處執行 */
        }
        else//PA0為低電平時,正常工作模式
        {        
          cont=0x1000000;
          while(cont--);
          gd_eval_led_on(LED2); // RB8燈亮
          printf("RUNing\r\n");
        }
    }// while()
}// main()

這份代碼在開發板上沒有問題,但在產品上是有問題的,這肯定是一些硬件參數偏向臨界值

,導致只在GD32F出現異常,或者GD32F就是容錯性差一點.

 

最后找到問題了,PA0引腳的上升沿電平不是90度上升的,上升沿信號有斜坡,通過減小PA0腳上

的電容,減小上接電阻,已OK. 看來MCU的阻抗大小和電氣兼容性,是換MCU要面對的重要問題。

光這問題就找了2天,不知道后面GD32F還會出現什么奇怪的問題.---啊門!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM