MM32F0140|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的系统时钟。
MM32F0140|MM32F0140 GPIO驱动LED灯(MM32F0140 GPIO)
文章图片

图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_PORTGPIOA #define LED1_PINGPIO_Pin_11 #define LED2_PORTGPIOB #define LED2_PINGPIO_Pin_3 #define LED3_PORTGPIOB #define LED3_PINGPIO_Pin_4 #define LED4_PORTGPIOB #define LED4_PINGPIO_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_InitTypeDefGPIO_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的外设时钟。
【MM32F0140|MM32F0140 GPIO驱动LED灯(MM32F0140 GPIO)】

    推荐阅读