前言:
系列器件是基于 M4 处理器的32位通用微控制器。该处理器包括三条AHB 总线分别称为 D-code总线、I-code 总线和系统总线。M4处理器的所有存储访问,根据不同的目的和目标存储空间,都会在这三条总线上执行。存储器的组织采用了哈佛结构,预先定义的存储器映射和高达 的存储空间,充分保证了系统的灵活性和可扩展性。
开发板板载了一个GD32F103C8的芯片,用于给板子下载程序使用。从外观看板子的集成度还是比较高的,将所有的IO口引出,方便用户调试程序。
板载了一个CH340(MSOP10封装)芯片,方便用户直接连接到电脑查看串口发送的数据,这个还是比较方便的,不需要额外的使用USB转TTL模块了。
板载两路按键的位置,其中的一路还是软件复位功能,只有一路按键是提供给用户操作的。BOOT0和BOOT1已经用跳线帽弄好,不过有其他需求的话我们把该引脚的电平接高或者是接低,以满足我们的要求。
一:keil5 开发环境搭建:
也可以直接在芯查查上面下载资料,主要是将pack包安装,否则编译环境编译代码编译不过去。
二:软件测试
2.1打开在网上下载的例程,
该处代码主要是实现功能是按下用户按键,完成LED的亮起和熄灭。
这里需要注意一下,需要选择GD32对应的下载算法,一开始安装的时候由于我这电脑上面有keil4的软件,安装编译环境的时候将下载算法安装到keil4中去了,导致我一开始下载程序的时候有问题,后来才找到问题。
代码分析:
初始化使用key和led的io口,将按键配置成输入模式,LED灯设置成输出模式
void gd_eval_key_init(key_typedef_enum key_num, keymode_typedef_enum key_mode)
{
/* enable the key clock */
rcu_periph_clock_enable(KEY_CLK[key_num]);
rcu_periph_clock_enable(RCU_AF);
/* condiv button pin as input */
gpio_init(KEY_PORT[key_num], GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, KEY_PIN[key_num]);
if (key_mode == KEY_MODE_EXTI) {
/* enable and set key EXTI interrupt to the lowest priority */
nvic_irq_enable(KEY_IRQn[key_num], 2U, 0U);
/* connect key EXTI line to key GPIO pin */
gpio_exti_source_select(KEY_PORT_SOURCE[key_num], KEY_PIN_SOURCE[key_num]);
/* condiv key EXTI line */
exti_init(KEY_EXTI_LINE[key_num], EXTI_INTERRUPT, EXTI_TRIG_FALLING);
exti_interrupt_flag_clear(KEY_EXTI_LINE[key_num]);
}
}
void gd_eval_led_init (led_typedef_enum lednum)
{
/* enable the led clock */
rcu_periph_clock_enable(GPIO_CLK[lednum]);
/* condiv led GPIO port */
gpio_init(GPIO_PORT[lednum], GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,GPIO_PIN[lednum]);
GPIO_BC(GPIO_PORT[lednum]) = GPIO_PIN[lednum];
}
实现代码,在中断函数内完成对按键的扫描和指示灯电平的翻转。
void EXTI0_IRQHandler(void)
{
if(RESET != exti_interrupt_flag_get(EXTI_0)){
gd_eval_led_toggle(LED1);
}
exti_interrupt_flag_clear(EXTI_0);
}
实物图如下:
个人建议:建议以后生产的开发板使用type-c接口,现在这种USB接口比较少了,调试起来有些不太方法,在这就是在板子上面增加几个外设芯片;比如说24C02(IIC),W25Q64(SPI)等等,这样更有助于使用者学习,
全部评论