目录: 1.MM32F0020简介 2.MM32F0020系统时钟配置 3.MM32F0020的GPIO外设配置及其初始化 4.使用官网的Systick定时器做延时 5.MM32F0020 GPIO驱动LED灯 提要: 本实例学习MM32F0020的GPIO外设的配置,配置PA1、PA7、PA9、PA11为推挽输出模式驱动LED1~LED4灯翻转,每隔1s时间(使用官网的Systick延时)翻转1次LED灯的状态。 内容: 1、MM32F0020简介: (1)MM32F0020微控制器是基于Arm® Cortex®-M0内核,最高工作频率可达48MHz; (2)供电电压支持:2.0V - 5.5V; (3)多达32KB的Flash,2KB的SRAM;
(4)1个I2C; (5)2个UART; (6)1个12位的共8通道的ADC; (7)1个I2C或I2S; (8)1个16位高级定时,1个16位通用定时器,1个16位基本定时器; (9)1个IWDG和一个WWDG看门狗。 2.MM32F0020系统时钟配置: 如下图1所示,1.MM32F0020可以使用外部HSE 8M时钟倍频到48M作为系统时钟,2.也可使用内部HSI 8M时钟倍频到48M作为系统时钟,二者选择其1,选择打开对应的时钟宏即可,本实例选择2开启HSI 8M倍频到48M时钟作为MM32F0020的系统时钟。 3.MM32F0020的GPIO外设配置及其初始化: MM32F0020每个外设都有其对应的时钟,在使用外设前应先配置使能其外设时钟,本实例使用GPIOA外设的PA1、PA7、PA9、PA11驱动LED灯每隔1s翻转1次做LED等的1s闪烁实验 具体配置步骤,及其初始化如下: (1)使能GPIOA外设时钟; (2)配置IO的管脚; (3)配置GPIO的输出速度; (4)配置IO管脚的工作模式; (5)根据GPIOA配置的参数整体初始化GPIO各管脚的成员参数。 使用宏定义定义GPIOA的PA1、PA7、PA9、PA11驱动LED1~LED4代码如下,使用宏定义方便代码维护,需要更换GPIO端口或管脚时只需在宏定义中修改对应的端口GPIOx和GPIO_Pin_x即可 #define LED1_PORT GPIOA
#define LED1_PIN GPIO_Pin_1
#define LED2_PORT GPIOA
#define LED2_PIN GPIO_Pin_7
#define LED3_PORT GPIOA
#define LED3_PIN GPIO_Pin_9
#define LED4_PORT GPIOA
#define LED4_PIN GPIO_Pin_11
#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))
MM32F0020 GPIOA的外设配置及其IO的初始化,即PA1、PA7、PA9、PA11驱动LED1~LED4的初始化配置步骤如下代码所示: void Bsp_LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
//Enable GPIOA Clock
RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOA, ENABLE);
//Init_struct member with its default value.
GPIO_StructInit(&GPIO_InitStruct);
//PA1:LED1,PA7:LED2,PA9:LED3,PA11:LED4
GPIO_InitStruct.GPIO_Pin = LED1_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(LED1_PORT, &GPIO_InitStruct);
//OFF LED1~LED4
LED1_OFF();
LED2_OFF();
LED3_OFF();
LED4_OFF();
//ON LED1~LED4
LED1_ON();
LED2_ON();
LED3_ON();
LED4_ON();
}
4.使用官网的Systick定时器做延时: 在main函数中调用Systick定时器初始化函数,作为LED1~LED4翻转闪烁延时,只需调用DELAY_Init();即可。 5.MM32F0020 GPIO驱动LED灯: 如下代码所示,在main函数中调用Systick定时器初始化函数DELAY_Init和LED初始化函数Bsp_LED_Init,在while(1)主循环中调用之前宏定义的LED1_TOGGLE ~ LED4_TOGGLE翻转功能, 然后调用DELAY_Ms(1000);即1s延时函数,则实现PA1、PA7、PA9、PA11每隔1s驱动翻转1次LED1~LED4灯的状态,实现LED1~LED4灯的闪烁。 4.使用官网的Systick定时器做延时:
在main函数中调用Systick定时器初始化函数,作为LED1~LED4翻转闪烁延时,只需调用DELAY_Init();即可。
5.MM32F0020 GPIO驱动LED灯:
如下代码所示,在main函数中调用Systick定时器初始化函数DELAY_Init和LED初始化函数Bsp_LED_Init,在while(1)主循环中调用之前宏定义的LED1_TOGGLE ~ LED4_TOGGLE翻转功能,
然后调用DELAY_Ms(1000);即1s延时函数,则实现PA1、PA7、PA9、PA11每隔1s驱动翻转1次LED1~LED4灯的状态,实现LED1~LED4灯的闪烁。
|