前言
刚收到开发板,发现社区朋友收到的开发板是gd32f310k,也就是封装为qfn32,但是我自己收到的是qfn28,芯片面积约为上面的1/4(qaq),在参考demo时需要注意两者开发板io口有些许差异,参考工程需要参考:gd32330g_start_demo_suites文件夹中的project文件夹。
gd32f3作为一个小而美的mcu,小容量的ram,确实不适合跑系统或者过于冗余性的东西,作为一个协处理器,用作常用外设控制,当为其用武之地。
multibutton
multibutton 是一个小巧简单易用的事件驱动型按键驱动模块,可无限量扩展按键,按键事件的回调异步处理方式可以简化你的程序结构,去除冗余的按键处理硬编码,让你的按键业务逻辑更清晰。(搬运自github)
移植过程
下载gitbub仓库,在当前工程中clone仓库代码:
添加进工程,并包含头文件
添加定时器中断,将定时器中断改为5ms中断一次。
参考,测试代码。
void gd_timer0_config(uint32_t arr,uint16_t prescaler){ timer_parameter_struct timer0initpara; /* enable the timer0 clock */ rcu_periph_clock_enable(rcu_timer1);//挂在ahb=72mhz上面 /* 初始化timer0 定时器参数,设置自动重装载值,分频系数,计数方式 */ timer0initpara.clockdivision=timer_ckdiv_div1;//分频因子 timer0initpara.alignedmode=timer_counter_edge;//边沿对齐 timer0initpara.counterdirection=timer_counter_up;//向上计数 timer0initpara.period=arr;//自动重新加载值 timer0initpara.prescaler=prescaler;//预分频值 if=1时就是72mhz else=72/(prescaler/2) //timer0initpara.repetitioncounter=;//重复计数器值 timer_init(timer1,&timer0initpara); //允许更新中断 timer_interrupt_enable(timer1,timer_int_up); //timer0中断优先级设置 nvic_irq_enable(timer1_irqn,1,1);//抢占优先级,响应优先级 //使能time0 timer_enable(timer1);}/*中断初始化*/gd_timer0_config(5000-1,144-1);//72mhz/(144/2)=1us 1us*1000=1ms 1us*5000=5ms/*中断回调函数*/void timer1_irqhandler(void){ if(set==timer_interrupt_flag_get(timer1,timer_int_up)) { //gd_eval_led_toggle(led1); button_ticks(); } timer_interrupt_flag_clear(timer1,timer_int_up);}
main函数初始化
/*注册一个按键对象*/ button_init(&btn1, gd_eval_key_state_get, set, bt1_id); /*注册按键事件*/ button_attach(&btn1, press_down, btn1_press_down_handler); button_attach(&btn1, press_up, btn1_press_up_handler); button_attach(&btn1, press_repeat, btn1_press_repeat_handler); button_attach(&btn1, single_click, btn1_single_click_handler); button_attach(&btn1, double_click, btn1_double_click_handler); button_attach(&btn1, long_press_start, btn1_long_press_start_handler); button_attach(&btn1, long_press_hold, btn1_long_press_hold_handler); button_start(&btn1);
添加相关回调
/*按下事件*/void btn1_press_down_handler(void *btn){ gd_eval_led_on(led1);}/*弹起事件*/void btn1_press_up_handler(void *btn){ gd_eval_led_off(led1);}/*重复按下事件 变量repeat计数连击次数*/void btn1_press_repeat_handler(void *btn){ uint8_t i = 0; for(i = 0; i <= btn1.repeat; i++){ gd_eval_led_toggle(led1); delay_1ms(250); gd_eval_led_toggle(led1); delay_1ms(250); }}/*单击按键事件*/void btn1_single_click_handler(void *btn){}/*双击按键事件*/void btn1_double_click_handler(void *btn){}/*达到长按时间阈值时触发一次*/void btn1_long_press_start_handler(void *btn){}/*长按期间一直触发*/void btn1_long_press_hold_handler(void *btn){}
结果展示
通过事件回调,可以轻松实现按键的按下、松开、连击、长按等事件对应不通过回调~
诺基亚回归全民刷屏,因为他有三点现在没有人够做到包括三星和华为
边缘计算是什么,边缘计算的优势是什么
单片机startup.a51文件标号和清零程序的内容详细解答
做拍拍乐电商竞拍商城模式系统APP开发
为什么二极管在线测量时,反向有电压?
MultiButton事件驱动型按键驱动移植测试
aigo国民好物固态硬盘S500和P3000,该如何选?
APS高级排产帮助企业构建知识化系统,推动数字化发展
有方科技推出了基于LTE Cat-1的通信模块产品
爆料称2021年重新设计的Mac包括英特尔机型
小米6最新消息:小米6疯狂出击,2499元血洗2017年旗舰市场!
高通推出 Qualcomm神经处理软件开发包SDK
一年时间从零基础到成为研究科学家的历程
微型光学心率监护仪参考设计方案
福布斯发布数字经济百强榜 中国14家企业上榜 BAT入选
ATSC频谱分析及NTSC抑制滤波器的信号检测
irf540n开关电路
有信仰的华为云 推动智能落地
我国柔性OLED产业未来三到五年的发展将会呈现什么趋势
小米正在打算进入冰箱和洗衣机市场