GD32学习2——流水灯
开发环境
MDK:keil 5.37
MCU: GD32F450IK
2.1GPIO工作原理
要想实现流水灯,首先必须了解GPIO的工作原理。
2.1.1 GPIO的基本结构如下图所示。
2.1.2 GD32 的 I/O 口可以由32位控制寄存器(GPIOx_CTL)配置为GPIO输入,GPIO输出,AF功能,模拟模式
分类 | CTLy | OMy | PUDy | ||
GPIO输入 | X | 浮空 | 00 | X | 00 |
上拉 | 01 | ||||
下拉 | 10 | ||||
GPIO输出 | 推挽 | 浮空 | 01 | 0 | 00 |
上拉 | 01 | ||||
下拉 | 10 | ||||
开漏 | 浮空 | 1 | 00 | ||
上拉 | 01 | ||||
下拉 | 10 | ||||
AFIO输入 | X | 浮空 | 10 | X | 00 |
上拉 | 01 | ||||
下拉 | 10 | ||||
AFIO输出 | 推挽 | 浮空 | 0 | 00 | |
上拉 | 01 | ||||
下拉 | 10 | ||||
开漏 | 浮空 | 1 | 00 | ||
上拉 | 01 | ||||
下拉 | 10 | ||||
模拟 | X | X | 11 | X | XX |
输入模式
浮空输入:浮空(floating)就是逻辑器件的输入引脚即不接高电平,也不接低电平。由于逻辑器件的内部结构,当它输入引脚悬空时,相当于该引脚接了高电平。一般实际运用时,引脚不建议悬空,易受干扰。 通俗讲就是让管脚什么都不接,浮空着。信号进入芯片内部后,既没有接上拉电阻也没有接下拉电阻,经由触发器输入。配置成这个模式后,用电压变量引脚电压为1点几伏,这是个不确定值。由于其输入阻抗比较大,一般把这种模式用于标准的通讯协议,比如IIC、USART的等。该模式是GD32复位之后的默认模式。
上拉输入:上拉就是把电位拉高,比如拉到Vcc。上拉就是将不确定的信号通过一个电阻嵌位在高电平,电阻同时起限流作用,弱强只是上拉电阻的阻值不同,没有什么严格区分。上拉输入就是信号进入芯片后加了一个上拉电阻,再经过施密特触发器转换成0、1信号,读取此时的引脚电平为高电平;
下拉输入:就是把电压拉低,拉到GND。与上拉原理相似。下拉输入就是信号进入芯片后加了一个下拉电阻,再经过施密特触发器转换成0、1信号,读取此时的引脚电平为低电平;
模拟输入:信号进入后不经过上拉电阻或者下拉电阻,关闭施密特触发器,经由另一线路把电压信号传送到片上外设模块。模拟输入是指传统方式的输入,数字输入是输入PCM数字信号,即0、1的二进制数字信号,通过数模转换,转换成模拟信号,经前级放大进入功率放大器,功率放大器还是模拟的。比如传送给ADC模块,由ADC采集电压信号。所以可以理解为模拟输入的信号是未经处理的信号,是原汁原味的信号。
即
输出模式
开漏输出:一般用在电平不匹配的场合,如需要输出5V的高电平。输出端相当于三极管的集电极,要得到高电平状态需要上拉电阻才行。适合于做电流型的驱动,其吸收电流的能力相对强(一般20mA以内)。
复用开漏输出:可以理解为GPIO口被用作第二功能时的配置情况(即并非作为通用IO口使用)。端口必须配置成复用开漏功能输出模式。
推挽式输出:可以输出高、低电平,连接数字器件;推挽结构一般是指两个三极管分别受两个互补信号的控制,总是在一个三极管导通的时候另一个截止。高低电平由IC的电源决定。推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流。推拉式输出级既提高电路的负载能力,又提高开关速度。
推挽式复用输出
备用功能(AF)——为了适应不同的器件封装,GPIO 端口支持软件配置将一些备用功能应用到其他引脚上。
2.2 I/O复用和重映射
2.2.1 I/O复用
2.3 GPIO流水灯硬件电路分析
2.4 GPIO流水灯寄存器分析
要想真正掌握一款单片机,分析寄存器是必不可少,但是对于GD32来再说,GD已经将寄存器操作封装成库函数,开发者只需要调用库函数即可.
点亮LED,基本步骤是:配置寄存器;控制寄存器。库开发只是将传统的配置方式编程函数,使单片机开发变得简单方便快捷。
2.5 GPIO 流水灯实现流程
在上文已经分析了GPIO的原理及操作步骤,现在我们就来写代码吧。
GPIO是开发GD32最基本的配置,所以掌握GPIO的配置显得尤为重要。要实现流水灯,一般步骤可以总结为如下:
1)GPIO 时钟使能;
2)GPIO 端口模式设置;
3)初始化IO口;
4)编写处理函数;
2.6 GPIO 流水灯实现
2.6.1 GPIO库函数
#include "gd32f4xx.h"/*!\brief configure led GPIO\param[in] lednum: specify the Led to be configured\arg LED1\arg LED2\arg LED3\param[out] none\retval none
*/
void gd_eval_led_init (led_typedef_enum lednum)
{/* enable the led clock */rcu_periph_clock_enable(GPIO_CLK[lednum]);/* configure led GPIO port */ gpio_mode_set(GPIO_PORT[lednum], GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,GPIO_PIN[lednum]);gpio_output_options_set(GPIO_PORT[lednum], GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN[lednum]);GPIO_BC(GPIO_PORT[lednum]) = GPIO_PIN[lednum];
}/*!\brief configure systick\param[in] none\param[out] none\retval none
*/
void systick_config(void)
{/* setup systick timer for 1000Hz interrupts */if (SysTick_Config(SystemCoreClock / 1000U)){/* capture error */while (1){}}/* configure the systick handler priority */NVIC_SetPriority(SysTick_IRQn, 0x00U);
}/*!\brief turn on selected led\param[in] lednum: specify the Led to be turned on\arg LED1\arg LED2\arg LED3\param[out] none\retval none
*/
void gd_eval_led_on(led_typedef_enum lednum)
{GPIO_BOP(GPIO_PORT[lednum]) = GPIO_PIN[lednum];
}/*!\brief turn off selected led\param[in] lednum: specify the Led to be turned off\arg LED1\arg LED2\arg LED3\param[out] none\retval none
*/
void gd_eval_led_off(led_typedef_enum lednum)
{GPIO_BC(GPIO_PORT[lednum]) = GPIO_PIN[lednum];
}/*!\brief delay a time in milliseconds\param[in] count: count in milliseconds\param[out] none\retval none
*/
void delay_1ms(uint32_t count)
{delay = count;while(0U != delay){}
}int main(void)
{ gd_eval_led_init(LED1);gd_eval_led_init(LED2);gd_eval_led_init(LED3);systick_config();while(1){/* turn on LED1 */gd_eval_led_on(LED1);/* insert 200 ms delay */delay_1ms(200);/* turn on LED2 */gd_eval_led_on(LED2);/* insert 200 ms delay */delay_1ms(200);/* turn on LED3 */gd_eval_led_on(LED3);/* insert 200 ms delay */delay_1ms(200); /* turn off LEDs */gd_eval_led_off(LED1);gd_eval_led_off(LED2);gd_eval_led_off(LED3);/* insert 200 ms delay */delay_1ms(200);}
}
GD32学习2——流水灯相关推荐
- FPGA第一天的学习-LED流水灯
FPGA第一天的学习-LED流水灯 每一次玩一块新的开发板我们都会首先做出一个流水灯,所以我也做出一个流水灯并且结合网上教程和自己的理解来试着将代码理解得更透彻. 1.硬件部分 由原理图我们可以知道时 ...
- 51单片机入门学习--LED流水灯呼吸灯
LED led:发光二极管,Light Emitting Diode,可用万用表测量正负极 二极管电路图 直插式led,长的一端是正极,短的一端是负极 贴片式led,三角形的尖指向的是负极,有颜色的是 ...
- 八位流水灯的verilog代码_Arduino入门 第七节-彗星灯 呼吸流水灯
在前面的课程中,我们学习了流水灯.呼吸灯的实现方法,本期课程我们将把呼吸灯和流水灯"组合"到一起,做一个"呼吸流水灯"的效果.呼吸流水灯,实际上就是" ...
- 《嵌入式 – GD32开发实战指南》第3章 GPIO流水灯的前世今生
开发环境: MDK:Keil 5.30 MCU:GD32F207IK 上一章通过控制GPIO的高低电平实现了流水灯,但只是告诉了大家怎么做,如何实现流水灯,本文将深入剖析的GPIO流水灯的前生今世,深 ...
- 《嵌入式 – GD32开发实战指南》第2章 初识GPIO流水灯
开发环境: MDK:Keil 5.30 MCU:GD32F207IK 2.1 GPIO工作原理 熟悉单片机的朋友都知道,学习的第一个例程就是流水灯,要想实现流水灯,首先必须了解GPIO的工作原理.GP ...
- FPGA学习笔记(1)简单的时序逻辑电路——流水灯
FPGA学习笔记(1)简单的时序逻辑电路--流水灯 编程语言为Verilog HDL 原理 (1)设计一个计数器,使开发板上的4个LED状态每500ms翻转一次.开发板上的晶振输出时钟频率为50MHz ...
- 51单片机入门学习小结(流水灯与数码管)
51单片机入门学习小结(流水灯与数码管) 对原理图的分析 以下是我所用单片机的原理图 这块51单片机一共有4个I/O口(意思为input/output),也代表着如果我们后续都要用到这四个的话那么功能 ...
- c语言intrins头文件,结合单片机学习板学习c语言之流水灯制作 intrins.h头文件
原标题:结合单片机学习板学习c语言之流水灯制作 intrins.h头文件 目的:实现流水灯. 本文引用地址:http://www.eepw.com.cn/article/201608/294948.h ...
- 4.6Proteus流水灯学习
目录 学习总结: 流水灯代码: 学习总结: 选AT89C52,然后选别的灯啊,电阻啊,再连线,蓝色的那个是自己画的主线,注意连在主线上的线要用LBL标号才能用,然后怎么把代码烧进去呢,双击芯片,把路径 ...
最新文章
- Struts2 2.5版本新配置filter-class
- mybatis学习笔记(3)-入门程序一
- 《码出高效:Java开发手册》背后的故事
- 文献记录(part6)--Dynamic Tree Cut in-depth description, tests and applications
- 前端笔记-thymeleaf获取及回显select数据(combox)
- 从小小后视镜看物联网的生态(下)
- AI研发新药真有那么神?可能哈佛、斯坦福和阿斯利康实验室都在吹牛
- qt 在qtextedit显示数组_QtWidget: 设置QTextEdit的各种颜色
- php mixed约束,Mixed Content: 混合被动/显示内容和混合活动内容
- Visio绘图怎么对齐连接点
- tp5验证码详细代码
- (vivo)安卓神器xposed框架Root安装指南
- 微信小程序之点点考勤经验总结
- 上海安陆FPGA程序下载
- 产品经理如何设计网页导航菜单
- 关于大数据技术原理与应用的学习(6)
- android 7.1 白屏,苹果iphone7手机白屏怎么回事 iphone7白屏不能关不了机的快速解决办法...
- 如何将白鹭引擎开发的游戏通过Egret Native发布到 GooglePlay平台
- java盘古分词_.NET使用Lucene.Net和盘古分词类库实现中文分词
- 艺赛旗(RPA)RPA8.0 解决滑动验证码完整流程
热门文章
- c语言printf输出字母,C语言printf()格式化输出控制
- shell脚本--重启服务
- linux css压缩工具下载,JS和CSS的压缩混淆工具(JsCompressor)下载 v3.0
- 报错解决:Can‘t connect to X11 window server using……
- Win7中解决无法卸载/升级 VS2008、无法输入序列号的问题
- 个位数统计(C语言)
- eyoucms自媒体新闻资讯类网站模板
- 小驼峰命名法与大驼峰命名法
- flash 与CODE memory ,ROM与Xdata
- unity敌人跟随(导航)