目录:

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

MM32F0140 GPIO驱动LED灯(MM32F0140 GPIO)的更多相关文章

  1. MM32F0020 GPIO驱动LED灯(MM32F0020 GPIO Toggle)

    目录: 1.MM32F0020简介 2.MM32F0020系统时钟配置 3.MM32F0020的GPIO外设配置及其初始化 4.使用官网的Systick定时器做延时 5.MM32F0020 GPIO驱 ...

  2. stm32开发笔记(三):stm32系列的GPIO基本功能之输出驱动LED灯、输入按键KEY以及Demo

    前言   stm32系列是最常用的单片机之一,不同的版本对应除了引脚.外设.频率.容量等'不同之外,其开发的方法是一样的.  本章讲解使用GPIO引脚功能驱动LED灯和接收Key按钮输入.   STM ...

  3. 灵动微电子ARM Cortex M0 MM32F0010 GPIO 的配置驱动LED灯

    灵动微电子ARM Cortex M0 MM32F0010 GPIO的配置 目录: 1.前言 2.学习方法简要说明 3.要点提示 4.注意事项 5.MM32F0010系统时钟的配置 6.MM32F001 ...

  4. 树莓派 使用python来操作GPIO 控制LED灯

    一.创建python驱动和控制GPIO 先新建一个文件夹用于放置脚本 mkdir python_gpio 进入文件夹内新建一个gpio_blink.py的脚本 cd python_gpio touch ...

  5. CC2530学习路线-基础实验-GPIO 控制LED灯亮灭(1)

    目录 1.前期预备知识 1.1 新大陆ZigBee模块LED灯电路 1.2 CC2530相关寄存器 1.3 寄存器操作技巧 1.4 CPU空转延时 1.4 操作流程图 2.程序代码 The End 1 ...

  6. TMS320VC5509总线驱动LED灯

    1. 重新建立的工程,需要添加宏定义才行 CHIP_5509 2. 驱动LED用的是74LVC573锁存器,LE高电平时,Q1=D0,LE低电平时,Q1=之前的状态,下面是数据总线 看下地址总线 看下 ...

  7. STM32之使用库函数驱动LED灯

    一.熟悉GPIO结构体 以下这个结构体是我从官方手册中获取的: typedef struct { u16 GPIO_Pin; GPIOSpeed_TypeDef GPIO_Speed; GPIOMod ...

  8. 小结-stm32 驱动LED灯

    使用位带操作,位带操作就是把每个比特膨胀成一个32位的字,当访问这些字的时候就访问这些比特位. http://www.cnblogs.com/xiaobo-Linux/ 然后,端口使能: //³õʼ ...

  9. 第7章 使用寄存器点亮LED灯

    第7章     使用寄存器点亮LED灯 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fir ...

随机推荐

  1. 深入学习python内存管理

    深入Python的内存管理   作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 语言的内存管理是语言设计的一个重要方面.它是决定语 ...

  2. Airtest 的连接安卓模拟器

    1. 开启安卓模拟器 2. 查看进程,MEmuHeadless.exe的进行程号, 然后在cmd中输入 netstat -ano|findstr "16116" 3. 到 airt ...

  3. .NET 诞生已20周年,您的 .NET 技能是否还停留在2010 年?

    20年来,我们见证了超过上千万.NET 开发员,当前有600万.NET 开发者正在使用.NET技术构建各类解决方案.今天,IT市场对.NET 开发人员的需求达到了前所未有的程度,特别是在中国,各大公司 ...

  4. open policy agent 语法总结

    OPA 文档模型 OPA将从外部加载的数据成为基本文档(base documents),有规则产生的值成为虚拟文档(virtual documents),此处"虚拟"的意思表示文档 ...

  5. Spring Boot一些基础配置

    1.定制banner,Spring Boot项目在启动的时候会有一个默认的启动图案: . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ...

  6. Java用n种方法编写实现双色球随机摇号案例

    方法清单 规则 实现方式一 实现方式二 实现方式三 实现方式四 实现方法五 之前我用JavaScript编写过一个实现双色球随机摇号的案例, 点击此处查看,今天我再用Java语言来实现这一效果. 规则 ...

  7. 【Linux/Oracle】ORA-00031:标记要终止的会话 解决

    在PL/SQL操作了一条delete语句用于删除这张1.4亿条数据的表,执行了12个小时还没删完 (经DB指导,量级大的需要使用truncate table table_name 进行删除) --查询 ...

  8. Solution -「LOCAL」充电

    \(\mathcal{Description}\)   给定 \(n,m,p\),求序列 \(\{a_n\}\) 的数量,满足 \((\forall i\in[1,n])(a_i\in[1,m])\l ...

  9. CentOS 7 下升级OpenSSH 7.4p1到OpenSSH 8.4p1

    文章目录 一.环境介绍 二.安装配置telnet 2.1.安装telnet-server 2.2.配置telnet 2.3.配置telnet登录的终端类型 2.4.启动telnet服务 三.切换登录方 ...

  10. 我们一起来学Shell - 初识shell

    文章目录 Shell 的分类 `bash` `csh` `ksh` `tcsh` `sh` `nologin` `zsh` Shell 能做什么 bash 环境变量文件 `/etc/profile` ...