系列文章目录
GD32F10X系列单片机学习基于官方例程及数据手册学习心得
一、LED和KEY这些基本的输入输出
前言
因为个人兴趣及近来进口芯片的不稳定因素,也同时提升下自己,将一个汽车用的STM系列更换为GD系列单片机,进行程序的移植,移植前我习惯性的对单片机的各个性能进行调试,当然首先从最基本的输入输出进行了解(LED,KEY,USART,UART,CAN,FREERTOS,PWM,TIM,USBFS等)在这做个学习记录,希望有兴趣的朋友们可以一起讨论学习,不对之处敬请谅解,并给予指点。
一、LED、KEY官方例程的学习
官方例程中将LED及KEY封装至一个数组内,再对数组进行操作,以LED为例:
二、使用步骤
1.引入如下数组:
代码如下(示例):
/* private variables */
static uint32_t GPIO_PORT[LEDn] = {LED0_GPIO_PORT,LED1_GPIO_PORT,LED2_GPIO_PORT,LED3_GPIO_PORT,LED4_GPIO_PORT,LED5_GPIO_PORT,LED6_GPIO_PORT
,LED7_GPIO_PORT,LED8_GPIO_PORT,LED9_GPIO_PORT,LED10_GPIO_PORT,LED11_GPIO_PORT,LED12_GPIO_PORT};
static uint32_t GPIO_PIN[LEDn] = {LED0_PIN,LED1_PIN,LED2_PIN,LED3_PIN,LED4_PIN,LED5_PIN,LED6_PIN,LED7_PIN,LED8_PIN,LED9_PIN,LED10_PIN,LED11_PIN,LED12_PIN};
这种方法属于集中式管理,但用惯了HAL库,转到这里觉得有点受限制了,感觉还是HAL官方软件生成的代码方便,随便用,实际上这里不封装也是可以的,因为gd_eval_led_init()才是根本,我把只要这种初始化,把每个IO按自己的想法封装下就OK了
2.IO操作部分代码
代码如下(示例):
void gd_eval_led_init (led_typedef_enum lednum)
{
/* enable the led clock */
rcu_periph_clock_enable(GPIO_CLK[lednum]); //IO频率这里的GPIO_CLK[lednum]不用数组时也就是RCU_GPIOX
/* configure led GPIO port */
gpio_init(GPIO_PORT[lednum], GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN[lednum]);//IO口模式速度设置,这里也就是想当于GPIOX和GPIO——PIN——X脚的功能设置
GPIO_BC(GPIO_PORT[lednum]) = GPIO_PIN[lednum];//最后设置输出低电平,GPIO——BOP是指输出高电平。
}
总结
其实万变不离其宗,IO口是单片机里内最基本的操作,也是最常用到的,我们可以根据自己习惯结合数据手册自习操作,达到自己满意的效果。