前言
本次实验是在上一篇建立工程的基础上增加的按键测试用例,使用了rtthread包“button”。
程序开发
1.在application的文件夹下建立key.c和key.h文件。
2.在RT—Thread Settings里添加名为“button”的软件包,配置如下图。
3.修改key.c代码
#include "ch32v30x.h"
#include <rtthread.h>
#include "drivers/pin.h"
#include "button.h"
#define BTN1_GPIO_PORT GPIOA
#define BTN1_GPIO_PIN GPIO_Pin_14
#define THREAD_PRIORITY 5
#define THREAD_STACK_SIZE 1024
#define THREAD_TIMESLICE 5
Button_t Button1;
static rt_thread_t tid1 = RT_NULL;
void Btn1_Dowm_CallBack(void *btn)
{
rt_kprintf("Button1 Click!\n");
}
void Btn1_Double_CallBack(void *btn)
{
rt_kprintf("Button1 Double click!\n");
}
void Btn1_Long_CallBack(void *btn)
{
rt_kprintf("Button1 Long press!\n");
}
void Btn1_Continuos_CallBack(void *btn)
{
rt_kprintf("Button1 Press continuously!\n");
}
void Btn1_ContinuosFree_CallBack(void *btn)
{
rt_kprintf("Button1 Press continuously free!\n");
}
uint8_t Read_KEY1_Level(void)
{
return GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_14);
}
void key_gpio_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure = {0};
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
static void thread1_entry(void *parameter)
{
rt_kprintf("key thread is working\r\n");
while(1)
{
Button_Process();
rt_thread_mdelay(20);
}
}
int key_init(void)
{
key_gpio_init();
Button_Create("Button1",
&Button1,
Read_KEY1_Level,
0);
Button_Attach(&Button1,BUTTON_DOWM,Btn1_Dowm_CallBack);
Button_Attach(&Button1,BUTTON_DOUBLE,Btn1_Double_CallBack);
Button_Attach(&Button1,BUTTON_CONTINUOS,Btn1_Continuos_CallBack);
Button_Attach(&Button1,BUTTON_CONTINUOS_FREE,Btn1_ContinuosFree_CallBack);
Button_Attach(&Button1,BUTTON_LONG,Btn1_Long_CallBack);
Get_Button_Event(&Button1);
tid1 = rt_thread_create("key_thread",
thread1_entry, RT_NULL,
THREAD_STACK_SIZE,
THREAD_PRIORITY, THREAD_TIMESLICE);
if (tid1 != RT_NULL)
rt_thread_startup(tid1);
}
MSH_CMD_EXPORT(key_init, key init);
4.编译和下载
测试结果
将开发板的PA14引脚与KEY引脚相连,打开串口助手。输入key_init+回车 指令,会提示“key thread is working”。然后单击或者双击开发板上的按键,会出现“Button1 Click!”或者“Button1 Double click!”提示,如果没有反应,请仔细检查连线。
|