R128开发指南
按键控制蜂鸣器
下载案例《按键控制蜂鸣器案例》代码
可以到全志在线-R128在线文档
或者
复制链接前往资料下载页面
https://www.aw-ol.com/downloads?cat=24
1
开发板方案
载入
首先我们搭建电路,如下:
我们使用的开发板是 R128-Devkit,需要开发 C906 核心的应用程序,所以载入方案选择 r128s2_module_c906
$ source envsetup.sh $ lunch_rtos 1
$ source envsetup.sh
$ lunch_rtos 1
2
GPIO驱动
勾选
mrtos_menuconfig 找到下列驱动
Drivers Options ---> soc related device drivers ---> GPIO devices ---> [*] enable GPIO driver [*] enbale GPIO hal APIs Test command
Drivers Options --->
soc related device drivers --->
GPIO devices --->
[*] enable GPIO driver
[*] enbale GPIO hal APIs Test command
3
编写程序
引入头文件
运行 mrtos_menuconfig 进入配置页面。在如下地址找到勾选相关软件包。
lichee/rtos/projects/r128s2/module_c906/src/main.c
进行头文件引入
#include
4
GPIO
配置引脚
1、配置 GPIO 的上下拉状态,使用
hal_gpio_set_pull(gpio_pin_t pin, gpio_pull_status_t pull);
这里我们设置 PA25 引脚为默认上拉状态
hal_gpio_set_pull(GPIOA(25), GPIO_PULL_UP);
2、配置 GPIO 输入输出模式,使用
printf("hello world!");
设置 GPIO 的输入输出模式,这里配置为输入模式。
hal_gpio_set_direction(GPIOA(25), GPIO_DIRECTION_INPUT);
3、GPIO 通常有多种功能,需要配置 MUX 选择需要的功能,使用
hal_gpio_pinmux_set_function(gpio_pin_t pin, gpio_muxsel_t function_index);
设置 GPIO 的复用功能,这里配置为GPIO 输入模式
hal_gpio_pinmux_set_function(GPIOA(25), GPIO_MUXSEL_IN);
4、获取GPIO的电平,使用
int hal_gpio_get_data(gpio_pin_t pin, gpio_data_t *data);
获取 GPIO 的电平,这里配置 PA25 为高电平点亮 LED
gpio_data_t gpio_data;hal_gpio_get_data(GPIOA(25), GPIO_DATA_HIGH);
gpio_data_t gpio_data;
hal_gpio_get_data(GPIOA(25), GPIO_DATA_HIGH);
5、配置 GPIO 的电平,使用
hal_gpio_set_data(gpio_pin_t pin, gpio_data_t data);
这里配置 PA18 为高电平点亮 LED
hal_gpio_set_data(GPIOA(18), GPIO_DATA_HIGH);
6、完整的配置 GPIO
gpio_data_t gpio_data;// 配置按键输入脚为输入,默认拉高hal_gpio_set_pull(GPIOA(25), GPIO_PULL_UP);hal_gpio_set_direction(GPIOA(25), GPIO_DIRECTION_INPUT);hal_gpio_pinmux_set_function(GPIOA(25), GPIO_MUXSEL_IN);// 配置按键输入脚为输出,默认拉高hal_gpio_set_pull(GPIOA(29), GPIO_PULL_UP);hal_gpio_set_direction(GPIOA(29), GPIO_DIRECTION_OUTPUT);hal_gpio_pinmux_set_function(GPIOA(29), GPIO_MUXSEL_OUT);hal_gpio_set_data(GPIOA(29), GPIO_DATA_HIGH);while(1){ hal_gpio_get_data(GPIOA(25), &gpio_data); // 检测按键输入,如果有输入则输出buzz if(gpio_data == GPIO_DATA_LOW){ printf("Key Pressed! And Buzz\n"); hal_gpio_set_data(GPIOA(29), GPIO_DATA_LOW); } else { hal_gpio_set_data(GPIOA(29), GPIO_DATA_HIGH); }}
// 配置按键输入脚为输入,默认拉高
// 配置按键输入脚为输出,默认拉高
hal_gpio_set_pull(GPIOA(29), GPIO_PULL_UP);
hal_gpio_set_direction(GPIOA(29), GPIO_DIRECTION_OUTPUT);
hal_gpio_pinmux_set_function(GPIOA(29), GPIO_MUXSEL_OUT);
hal_gpio_set_data(GPIOA(29), GPIO_DATA_HIGH);
while(1){
hal_gpio_get_data(GPIOA(25), &gpio_data);
// 检测按键输入,如果有输入则输出buzz
if(gpio_data == GPIO_DATA_LOW){
printf("Key Pressed! And Buzz\n");
hal_gpio_set_data(GPIOA(29), GPIO_DATA_LOW);
} else {
}
编译固件后烧录,按下按键蜂鸣器会发出声音,同时串口输出Key Pressed! And Buzz
-End-
本文内容均转载自
https://r128.docs.aw-ol.com/demo/keypressbuzz/