MM32F0140 GPIO驅動LED燈(MM32F0140 GPIO)

目錄:

1.MM32F0140簡介

2.MM32F0140系統時鐘配置

3.MM32F0140的GPIO外設配置及其初始化

4.使用官網的Systick定時器做延時

5.MM32F0140 GPIO驅動LED燈

提要:

  本實例學習MM32F0140的GPIO外設的配置,配置PA11、PB3、PB4、PB5為推挽輸出模式驅動LED1~LED4燈翻轉,每隔1s時間(使用官網的Systick延時)翻轉1次LED燈的狀態。

內容:

1、MM32F0140簡介

  (1)MM32F0140微控制器是基於Arm® Cortex®-M0內核,最高工作頻率可達72MHz;

  (2)供電電壓支持:2.0V – 5.5V;

  (3)多達64KB的Flash,8KB的SRAM;

  (4)1個I2C;

  (5)3個UART;

  (6)1個12位共13通道的ADC;

  (7)2個I2C或I2S;

  (8)1個16位高級定時,1個16位和1個32位的通用定時器,3個16位的基本定時器;

  (9)1個FlexCAN接口;

  (10)1個IWDG和1個WWDG看門狗。

2.MM32F0140系統時鐘配置:

  如下圖1所示,1.MM32F0140可以使用外部HSE 8M時鐘倍頻到72M作為系統時鐘,2.也可使用內部HSI 8M時鐘倍頻到72M作為系統時鐘,二者選擇其1,選擇打開對應的時鐘宏即可,本實例選擇2開啟HSI 8M倍頻到72M時鐘作為MM32F0140的系統時鐘。

圖1

3.MM32F0140的GPIO外設配置及其初始化:

  MM32F0140每個外設都有其對應的時鐘,在使用外設前應先配置使能其外設時鐘,本實例使用GPIOA和GPIOB外設的PA11、PB3、PB4、PB5驅動LED燈每隔1s翻轉1次做LED燈的1s閃爍實驗

具體配置步驟,及其初始化如下:

(1)使能GPIOA和GPIOB的外設時鐘;

(2)配置IO的管腳;

(3)配置GPIO的輸出速度;

(4)配置IO管腳的工作模式;

(5)根據GPIOA、GPIOB配置的參數整體初始化GPIOA和GPIOB各管腳的成員參數。

  使用宏定義定義GPIOA的PA11,GPIOB的PB3、PB4、PB5驅動LED1~LED4代碼如下,使用宏定義方便代碼維護,需要更換GPIO端口或管腳時只需在宏定義中修改對應的端口GPIOx和GPIO_Pin_x即可;

#define LED1_PORT  GPIOA
#define LED1_PIN   GPIO_Pin_11
#define LED2_PORT  GPIOB
#define LED2_PIN   GPIO_Pin_3
#define LED3_PORT  GPIOB
#define LED3_PIN   GPIO_Pin_4
#define LED4_PORT  GPIOB
#define LED4_PIN   GPIO_Pin_5

#define LED1_ON()       GPIO_ResetBits(LED1_PORT,LED1_PIN)
#define LED1_OFF()      GPIO_SetBits(LED1_PORT,LED1_PIN)
#define LED1_TOGGLE()   (GPIO_ReadOutputDataBit(LED1_PORT,LED1_PIN))?(GPIO_ResetBits(LED1_PORT,LED1_PIN)):(GPIO_SetBits(LED1_PORT,LED1_PIN))

#define LED2_ON()       GPIO_ResetBits(LED2_PORT,LED2_PIN)
#define LED2_OFF()      GPIO_SetBits(LED2_PORT,LED2_PIN)
#define LED2_TOGGLE()   (GPIO_ReadOutputDataBit(LED2_PORT,LED2_PIN))?(GPIO_ResetBits(LED2_PORT,LED2_PIN)):(GPIO_SetBits(LED2_PORT,LED2_PIN))

#define LED3_ON()       GPIO_ResetBits(LED3_PORT,LED3_PIN)
#define LED3_OFF()      GPIO_SetBits(LED3_PORT,LED3_PIN)
#define LED3_TOGGLE()   (GPIO_ReadOutputDataBit(LED3_PORT,LED3_PIN))?(GPIO_ResetBits(LED3_PORT,LED3_PIN)):(GPIO_SetBits(LED3_PORT,LED3_PIN))

#define LED4_ON()       GPIO_ResetBits(LED4_PORT,LED4_PIN)
#define LED4_OFF()      GPIO_SetBits(LED4_PORT,LED4_PIN)
#define LED4_TOGGLE()   (GPIO_ReadOutputDataBit(LED4_PORT,LED4_PIN))?(GPIO_ResetBits(LED4_PORT,LED4_PIN)):(GPIO_SetBits(LED4_PORT,LED4_PIN))

  MM32F0140 GPIOA和GPIOB的外設配置及其IO的初始化,即PA11、PB3、PB4、PB5驅動LED1~LED4的初始化配置步驟如下代碼所示:

void Bsp_LED_Init(void)
{
    GPIO_InitTypeDef  GPIO_InitStruct;
    //Enable GPIOA Clock
    RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOA, ENABLE);
    //Enable GPIOB Clock
    RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOB, ENABLE);
    
    //Init struct member with its default value.
    GPIO_StructInit(&GPIO_InitStruct);
    //PA11:LED1
    GPIO_InitStruct.GPIO_Pin  =  LED1_PIN;
    //GPIO Speed
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    //Push-pull output
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
    //Initializes the gpio peripheral according to the specified parameters in the init struct.    
    GPIO_Init(LED1_PORT, &GPIO_InitStruct);
    
    //PB3:LED2,PB4:LED3,PB5:LED4
    GPIO_InitStruct.GPIO_Pin  = LED2_PIN | LED3_PIN | LED4_PIN;
    //GPIO Speed
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    //Push-pull output
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
    //Initializes the gpio peripheral according to the specified parameters in the init struct.    
    GPIO_Init(LED2_PORT, &GPIO_InitStruct);

    LED1_OFF();
    LED2_OFF();
    LED3_OFF();
    LED4_OFF();

    LED1_ON();
    LED2_ON();
    LED3_ON();
    LED4_ON();
}

4.使用官網的Systick定時器做延時:

  在main函數中調用Systick定時器初始化函數,作為LED1~LED4翻轉閃爍延時,只需調用DELAY_Init();即可。

5.MM32F0140 GPIO驅動LED燈:

  如下代碼所示,在main函數中調用Systick定時器初始化函數DELAY_Init和LED初始化函數Bsp_LED_Init,在while(1)主循環中調用之前宏定義的LED1_TOGGLE ~ LED4_TOGGLE翻轉功能,

然後調用DELAY_Ms(1000);即1s延時函數,則實現PA11、PB3、PB4、PB5每隔1s驅動翻轉1次LED1~LED4燈的狀態,實現LED1~LED4燈的閃爍。

int main(void)
{
    //Systick Init
    DELAY_Init();
    //LED GPIO Init
    Bsp_LED_Init();
    
    while(1) 
    {
        //LED1~LED4 Toggle
        LED1_TOGGLE();
        LED2_TOGGLE();
        LED3_TOGGLE();
        LED4_TOGGLE();
        DELAY_Ms(1000);
    }
}

總結:

  本實例學習MM32F0140的GPIO外設的配置,配置PA11、PB3、PB4、PB5為推挽輸出模式驅動LED1~LED4燈翻轉,每隔1s時間(使用官網的Systick延時)翻轉1次LED燈的狀態。

注意事項:

  (1)配置系統時鐘為HSI 8M倍頻到72M或使用HSE 8M倍頻到72M時鐘(開啟對應的時鐘宏即可,其它時鐘頻率也可添加自定義時鐘宏)

  (2)使用外設時比如GPIOA和GPIOB外設,需使能GPIOA和GPIOB的外設時鐘。