接上文| # 【开鸿智谷NiobeU4开发板免费试用体验】Demo例程; |
感谢开鸿智谷研发人员依然小烨哥和 大佬们的支持指导。
想用开鸿智谷NiobeU4开发板资源 (GPIO02、GPIO27)输出,(ADC1_CH0上有SW4和SW5两个按键)模拟输入,板(GPIO02控制双色LED的红色、GPIO27控制双色LED的蓝色)LED,板(ADC1_CH0上有SW4和SW5两个按键)button,来通过光耦中间继电器控制加热设备。
程序根据厂家提供资料 ,想采用鸿蒙LiteOS系统。
开发自己的应用程序,
方法1:
- 需要在menuconfig中关闭 use openvalley niobeu4 application选项,然后在niobeu4_src/vendor/openvalley/niobeu4/demo/BUILD.gn文件中modules选项中填入自己的应用程序目录名,目录下内容可参考其它示例程序。
方法2:
- 拷贝一份demo 案例目录重新命名新案例目录名,
- 修改niobeu4_src/vendor/openvalley/niobeu4/demo/Kconfig.liteos_m.applications
- 修改新案例目录名下.application_config
- 修改新案例目录名下BUILD.gn
- 修改新案例目录名下程序
准备采用 方法2。
控温程序(1)
起动系统及MobaXterm,
1. 新案例目录
拷贝一份niobeu4_src/vendor/openvalley/niobeu4/demo/002_system_los_thread
重新命名 niobeu4_src/vendor/openvalley/niobeu4/demo/301_user
2. 修改Kconfig.liteos_m.applications
在MobaXterm右侧
在niobeu4_src/vendor/openvalley/niobeu4/demo/目录
下打开Kconfig.liteos_m.applications文件,在最后的位置添加default "301_user" if NIOBEU4_APPLICATION_301:
config USE_OPENVALLEY_APPLICATION
bool "use openvalley niobeu4 application"
default n
help
This is a switch for use openvalley niobeu4 application.
If you want to write your application code, please close it.
choice
prompt "niobeu4 application choose"
depends on USE_OPENVALLEY_APPLICATION
default NIOBEU4_APPLICATION_001
help
This is a choose for application name
orsource "*/.application_config"
endchoice
config NIOBEU4_APPLICATION_NAME
string
depends on USE_OPENVALLEY_APPLICATION
default "001_quick_start" if NIOBEU4_APPLICATION_001
default "002_system_los_thread" if NIOBEU4_APPLICATION_002
default "003_system_los_timer" if NIOBEU4_APPLICATION_003
default "004_system_los_event" if NIOBEU4_APPLICATION_004
default "005_system_los_mutex" if NIOBEU4_APPLICATION_005
default "006_system_los_semp" if NIOBEU4_APPLICATION_006
default "007_system_los_message" if NIOBEU4_APPLICATION_007
default "101_hdf_adc" if NIOBEU4_APPLICATION_101
default "102_hdf_gpio" if NIOBEU4_APPLICATION_102
default "103_hdf_uart" if NIOBEU4_APPLICATION_103
default "104_hdf_watchdog" if NIOBEU4_APPLICATION_104
default "105_hdf_pwm" if NIOBEU4_APPLICATION_105
default "106_hdf_i2c" if NIOBEU4_APPLICATION_106
default "107_hdf_spi" if NIOBEU4_APPLICATION_107
default "201_bluetooth" if NIOBEU4_APPLICATION_201
default "202_wifi" if NIOBEU4_APPLICATION_202
default "301_user" if NIOBEU4_APPLICATION_301
3. 修改.application_config
在MobaXterm右侧
在niobeu4_src/vendor/openvalley/niobeu4/demo/301_user目录
下打开# .application_config文件,修改内容:
config NIOBEU4_APPLICATION_301
bool "301_user"
select DRIVERS
select DRIVERS_HDF
select DRIVERS_HDF_PLATFORM
select DRIVERS_HDF_CONFIG_MACRO
select DRIVERS_HDF_PLATFORM_GPIO
select DRIVERS_HDF_PLATFORM_ADC
4. 修改BUILD.gn
在MobaXterm右侧
在niobeu4_src/vendor/openvalley/niobeu4/demo/301_user目录
下打开BUILD.gn文件,修改内容:
import("//kernel/liteos_m/liteos.gni")
assert(defined(LOSCFG_DRIVERS_HDF_CONFIG_MACRO), "Must Config LOSCFG_DRIVERS_HDF_CONFIG_MACRO in kernel/liteos_m menuconfig!")
assert(defined(LOSCFG_DRIVERS_HDF_PLATFORM_GPIO), "Must Config LOSCFG_DRIVERS_HDF_PLATFORM_GPIO in kernel/liteos_m menuconfig!")
module_name = get_path_info(rebase_path("."), "name")
kernel_module(module_name) {
sources = [
"os_thread_example.c"
]
include_dirs = [
"//kernel/liteos_m/kernel/include"
"//drivers/hdf_core/framework/include/platform/",
"//drivers/hdf_core/framework/include/utils/",
"//drivers/hdf_core/framework/support/platform/include/gpio",
"//drivers/hdf_core/adapter/khdf/liteos_m/osal/include/",
"//drivers/hdf_core/framework/include/core/",
"//drivers/hdf_core/framework/include/osal/",
"//device/soc/esp/esp32/components/esp_adc_cal/include/",
"//device/soc/esp/esp32/components/driver/esp32/include/"
]
}
5. 修改主程序
修改新案例目录名下 主程序
在MobaXterm右侧打
在niobeu4_src/vendor/openvalley/niobeu4/demo/301_user
下打开os_thread_example.c文件,修改内容:
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include "los_task.h"
#include "ohos_run.h"
#include "gpio_types.h"
#include "gpio_if.h"
#include "cmsis_os2.h"
#include "hdf_log.h"
#include "ohos_run.h"
#include "esp_adc_cal.h"
UINT32 g_taskHiId;
UINT32 g_taskLoId;
#define TSK_PRIOR_HI 24
#define TSK_PRIOR_LO 25
#define SYS_DELAY_TICKS 200
#define TASK_STACK_SIZE 4096
#define TASK_PRIO 25
#define KEY_LED_OFF 0
#define KEY_LED_ON 1
#define RED_LED_PIN_INDEX 0
#define BLUE_LED_PIN_INDEX 1
#define PWR_SW_PIN_INDEX 2
osThreadId_t g_taskID = NULL;
UINT32 button_o=0;
UINT32 Example_TaskHi(UINT32 arg)
{
int raw;
GpioSetDir(PWR_SW_PIN_INDEX, GPIO_DIR_OUT);
GpioWrite(PWR_SW_PIN_INDEX, KEY_LED_ON);
GpioSetDir(RED_LED_PIN_INDEX, GPIO_DIR_OUT);
GpioWrite(RED_LED_PIN_INDEX, KEY_LED_OFF);
GpioSetDir(BLUE_LED_PIN_INDEX, GPIO_DIR_OUT);
GpioWrite(BLUE_LED_PIN_INDEX, KEY_LED_OFF);
HDF_LOGE("[key_led] GPIO init\n");
adc1_config_width(ADC_WIDTH_12Bit);
adc1_config_channel_atten(ADC1_CHANNEL_0, ADC_ATTEN_DB_11);
HDF_LOGE("[key_led] ADC init\n");
while (1)
{
raw = adc1_get_raw(ADC1_CHANNEL_0);
UINT32 button_s=0;
if (raw < 100)
{
LOS_Msleep(30);
raw = adc1_get_raw(ADC1_CHANNEL_0);
if (raw < 100)
{
button_o=55;
button_s++;
HDF_LOGE("[key_led] sw4 pressed raw: %d\n", raw);
while(adc1_get_raw(ADC1_CHANNEL_0)< 100){ LOS_Msleep(30);
button_s++;
if (button_s>34){
}
if (button_s>240){button_s=240;}
}
button_s=0;
HDF_LOGE("[key_led] sw4 pressed up: %d\n", raw);
}
}
else if (raw >2000 && raw < 3000)
{
LOS_Msleep(30);
raw = adc1_get_raw(ADC1_CHANNEL_0);
if (raw >2000 && raw < 3000)
{
button_o=66;
button_s++;
HDF_LOGE("[key_led] sw5 pressed raw: %d\n", raw);
raw = adc1_get_raw(ADC1_CHANNEL_0);
while(raw >2000 && raw < 3000){ LOS_Msleep(30);
button_s++;
if (button_s>34){
}
if (button_s>240){button_s=240;}
raw = adc1_get_raw(ADC1_CHANNEL_0);
}
button_s=0;
HDF_LOGE("[key_led] sw5 pressed up: %d\n", raw);
}
}
LOS_Msleep(SYS_DELAY_TICKS);
}
}
UINT32 Example_TaskLo(UINT32 arg)
{uint16_t key_state = 0;
while(1){
LOS_Msleep(30);
if (button_o==55){
GpioRead(RED_LED_PIN_INDEX, &key_state);
button_o=0;
HDF_LOGE("[key_state] sw4 : %d\n", key_state);
if (key_state){
GpioWrite(RED_LED_PIN_INDEX, KEY_LED_OFF);
HDF_LOGE("[RED_LED] sw4 : Off\n");
}
else{
GpioWrite(RED_LED_PIN_INDEX, KEY_LED_ON);
HDF_LOGE("[RED_LED] sw4 : ON\n");
}
}
if (button_o==66){
GpioRead(BLUE_LED_PIN_INDEX, &key_state);
button_o=0;
HDF_LOGE("[key_state] sw5 : %d\n", key_state);
if (key_state){GpioWrite(BLUE_LED_PIN_INDEX, KEY_LED_OFF);
HDF_LOGE("[RED_LED] sw5 : Off\n");
}
else{
GpioWrite(BLUE_LED_PIN_INDEX, KEY_LED_ON);
HDF_LOGE("[RED_LED] sw5 : ON\n");}
}
}
UINT32 Example_TskCaseEntry(VOID)
{
UINT32 ret;
TSK_INIT_PARAM_S initParam = {0};
LOS_TaskLock();
printf("LOS_TaskLock() Success!\n");
UINT32 curTaskID = LOS_CurTaskIDGet();
TSK_INFO_S taskInfo;
ret = LOS_TaskInfoGet(curTaskID, &taskInfo);
if (ret == LOS_OK) {
printf("curTask prio = %d\n", taskInfo.usTaskPrio);
}
initParam.pfnTaskEntry = (TSK_ENTRY_FUNC)Example_TaskHi;
initParam.usTaskPrio = TSK_PRIOR_HI;
initParam.pcName = "TaskHi";
initParam.uwStackSize = LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE;
initParam.uwResved = LOS_TASK_ATTR_JOINABLE;
ret = LOS_TaskCreate(&g_taskHiId, &initParam);
if (ret != LOS_OK) {
LOS_TaskUnlock();
printf("Example_TaskHi create Failed!\n");
return LOS_NOK;
}
printf("Example_TaskHi create Success!\n");
initParam.pfnTaskEntry = (TSK_ENTRY_FUNC)Example_TaskLo;
initParam.usTaskPrio = TSK_PRIOR_LO;
initParam.pcName = "TaskLo";
initParam.uwStackSize = LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE;
ret = LOS_TaskCreate(&g_taskLoId, &initParam);
if (ret != LOS_OK) {
LOS_TaskUnlock();
printf("Example_TaskLo create Failed!\n");
return LOS_NOK;
}
printf("Example_TaskLo create Success!\n");
LOS_TaskUnlock();
return LOS_OK;
}
OHOS_APP_RUN(Example_TskCaseEntry);
构建源码
- 进入源码根目录,执行hb set命令并选择openvalley下的iotlink。
hb set
hb build –f
构建成功会提示类似如下信息。
[OHOS INFO] iotlink build success
[OHOS INFO] cost time: 0:03:28
ls /home/lst/niobeu4_src/out/niobeu4/iotlink/bin/
| 固件名称 | 用途 |
| ---------------- | ------------------------------- |
| OHOS_Image.bin | OpenHarmony内核及应用镜像文件 |
| bootloader.bin | 启动引导镜像文件 |
| partitions.bin | 分区表镜像文件 |
烧录镜像
- 通过MobaXterm软件ssh登录服务器,将生成的文件Download到Windows系统下,如图所示。
Windows下可以使用Flash_Download_Tool
工具进行烧录,点击这里开始下载。
- 在windows下解压flash_download_tool_3.9.2.rar。
- 双击解压后得到的烧录工具flash_download_tool_3.9.2.exe,chipType选择 ESP32, workMode选择 develop,进入主界面。
图4 Flash_Download_Tool
打开页面图
- 连接开发板的TypeC口到PC,查看设备管理器,确定串口端口号。
图5 设备管理器图
- 进入下载页面,填入需要烧录的 bin 文件和对应的烧录地址,并根据自己实际 需求填入 SPI SPEED、SPI MODE、COM 及 BAUD。
固件对应烧录地址如下。
//out/niobeu4/iotlink/bin/bootloader.bin
//out/niobeu4/iotlink/bin/partitions.bin
//out/niobeu4/iotlink/OHOS_Image.bin
图6 烧录设置页面图
- 点击 START 开始下载。下载过程中,下载工具会读取 flash 的信息和芯片的 MAC 地址。我们可以通过勾选框选择是否烧录该文件,一般我们在首次烧录时会全部烧录,为了加快开发效率,调试时只需烧录
OHOS_Image.bin
即可。下载完成后,可以看到如下提示。
图7 烧录成功页面图
运行镜像
烧录完成后需要按下复位键复位设备,程序才会启动。
推荐使用xshell
进行串口调试,点击这里进行下载。
达到预期状态。