ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

MM32F0140 GPIO驱动LED灯(MM32F0140 GPIO)

2022-03-09 14:02:33  阅读:251  来源: 互联网

标签:LED1 LED2 LED MM32F0140 PIN GPIO PORT LED4


目录:

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的外设时钟。

 

标签:LED1,LED2,LED,MM32F0140,PIN,GPIO,PORT,LED4
来源: https://www.cnblogs.com/armny3264-lcpj/p/15984833.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有