TA的每日心情 | 开心 2017-6-17 09:42 |
---|
签到天数: 3 天 连续签到: 1 天 [LV.2]偶尔看看I
|
本帖最后由 沙漠之风 于 2017-4-18 18:01 编辑
玩GD32F450那些事之工程模板+按键中断
一、三个坑你跳了吗?
介绍工程模板和按键中断前发发牢骚,说说遇到的三坑:板收到两天了,第一天算是跳坑里了,第一个坑就是这CH340驱动不起来,各种驱动各种安装,搞了一下午。哈哈哈,直到晚上才发现我确实是跳坑里了。原来这数据线居然是坏的 ,不过咱们群主“飞飞”第一时间给我解决了,感谢哦!可是没多久又进入了第二个坑,居然我们这历程代码默认是焊接了外部晶振的,写了个流水灯,代码一直卡死在外部晶振没法正常起震的死循环中。亲爱的历程提供者,190你提供历程可是使用内部晶振,这次你咋换风格了。。。,好吧,还好这GD的固件库写的很清晰,注释一行,去掉一行注释就解决问题了。对了还有坑就是,我的keil是Version:5.22,这也给我留了一坑,就是最新版的CMSIS5.0.0中间是缺少啥文件吗?编译时报错,提示缺少“core_cmInstr.h”文件,后面没有办法将CMSIS 5.0换成了4.5.0才编译通过。各位伙计们,这些坑我算是全跳,你们就直接过吧。。。
坑二解决截图
坑三解决截图
二、工程环境搭建
2.1、下载资源
2.2、安装驱动
2.3、安装GD32F4库
2.4新建文件夹
2.5从固件库(GD32F4xx_Firmware_Library_V1.2)中拷贝文件下面文件到Libraries中
2.6新建工程,选择芯片型号
- void Led_gpio_config(void)
- {
- /* enable the led clock */
- rcu_periph_clock_enable(RCU_GPIOB);
- rcu_periph_clock_enable(RCU_GPIOD);
- /* configure led GPIO port PB3 PB4 */
- // gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,GPIO_PIN_3);
- // gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_3);
- // GPIO_BC(GPIOB) = GPIO_PIN_3;
- gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,GPIO_PIN_4|GPIO_PIN_3);
- gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_4|GPIO_PIN_3);
- GPIO_BC(GPIOB) = GPIO_PIN_4|GPIO_PIN_3;
- /* configure led GPIO port PD7 */
- gpio_mode_set(GPIOD, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,GPIO_PIN_7);
- gpio_output_options_set(GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_7);
- GPIO_BC(GPIOD) = GPIO_PIN_7;
- }
复制代码3.2、按键引脚配置 - void BT_gpio_config(void)
- {
- /* enable the BT clock */
- rcu_periph_clock_enable(RCU_GPIOA);
- rcu_periph_clock_enable(RCU_GPIOE);
- rcu_periph_clock_enable(RCU_SYSCFG);
- /* configure BT GPIO port PE0 PE1*/
- gpio_mode_set(GPIOE, GPIO_MODE_INPUT, GPIO_PUPD_NONE,GPIO_PIN_0|GPIO_PIN_1);
- /* configure BT GPIO port PA0 */
- gpio_mode_set(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_NONE,GPIO_PIN_0);
- }
复制代码 3.3、中断配置- void BT_exit_config(void)
- {
- /* PE0 中断配置*/
- nvic_irq_enable(EXTI0_IRQn, 2U, 0U);
- /* connect key EXTI line to key GPIO pin */
- syscfg_exti_line_config(EXTI_SOURCE_GPIOE, EXTI_SOURCE_PIN0);
- /* configure key EXTI line */
- exti_init(EXTI_0, EXTI_INTERRUPT, EXTI_TRIG_FALLING);
- exti_interrupt_flag_clear(EXTI_0);
- /* PE1 中断配置*/
- nvic_irq_enable(EXTI1_IRQn, 2U, 1U);
- /* connect key EXTI line to key GPIO pin */
- syscfg_exti_line_config(EXTI_SOURCE_GPIOE, EXTI_SOURCE_PIN1);
- /* configure key EXTI line */
- exti_init(EXTI_1, EXTI_INTERRUPT, EXTI_TRIG_FALLING);
- exti_interrupt_flag_clear(EXTI_1);
- }
复制代码 3.4中断函数- void EXTI0_IRQHandler (void)
- {
- if (RESET != exti_interrupt_flag_get(EXTI_0)) {
- GPIO_TG(GPIOB) = GPIO_PIN_4;
- exti_interrupt_flag_clear(EXTI_0);
- }
- }
- void EXTI1_IRQHandler (void)
- {
- if (RESET != exti_interrupt_flag_get(EXTI_1)) {
- GPIO_TG(GPIOB) = GPIO_PIN_3;
- exti_interrupt_flag_clear(EXTI_1);
- }
- }
复制代码 3.5主函数- int main(void)
- {
- systick_config();
- Led_gpio_config();
- BT_gpio_config();//配置引脚
- BT_exit_config();//配置中断
- while (1){
- delay_1ms(500);
- /* check whether the button is pressed */
- if(RESET == gpio_input_bit_get(GPIOA,GPIO_PIN_0)){
- delay_1ms(1);
- /* check whether the button is pressed */
- if(RESET == gpio_input_bit_get(GPIOA,GPIO_PIN_0)){
- GPIO_TG(GPIOD) = GPIO_PIN_7;
- }
- }
- }
- }
复制代码
四、效果示意图
五、代码分享
此处收两个铜板哈哈,有进才有动力嘛!!!
KEY.rar
(7.38 MB, 下载次数: 11, 售价: 2 与非币)
|
|