内容简介
本文利用星闪BS25开发板NL001测试一下官方sdk中的外设程序,以便熟悉外设的基本操作。
测试工具
Operating system:Windows 10 home
deveco-device-tool-all-in-one:1.1.1_beta2
DevTools_CFBB:1.0.5
Compiler:CFBB IDE 1.0.3
Sdk:20230928
BurnTool:5.0.34
DebugKits_CFBB:3.0.98
Python:3.8.10
VSCode:1.66.2
Here we go
本文通过写一个程序让这块开发板上的三颗LED轮流点亮:
这几颗LED从下往上分别连接了BS25的S_AGPIO12、S_AGPIO07和S_MGPIO30,并且当GPIO输出高电平时LED会点亮。
我们采用blinky程序进行修改。先“pythonbuild.py standard-bs25-app-evb menuconfig”配置工程为blinky:
然后打开blinky_cmsis.c,修改以下代码:
#defineLED_R S_AGPIO12
#defineLED_B S_AGPIO7
#defineLED_W S_MGPIO30
staticvoid *blinky_task(constchar *arg)
{
unused(arg);
uapi_pin_set_mode(LED_R, HAL_PIO_FUNC_GPIO);
uapi_gpio_set_dir(LED_R, GPIO_DIRECTION_OUTPUT);
uapi_gpio_set_val(LED_R, GPIO_LEVEL_LOW);
uapi_pin_set_mode(LED_B, HAL_PIO_FUNC_GPIO);
uapi_gpio_set_dir(LED_B, GPIO_DIRECTION_OUTPUT);
uapi_gpio_set_val(LED_B, GPIO_LEVEL_LOW);
uapi_pin_set_mode(LED_W, HAL_PIO_FUNC_GPIO);
uapi_gpio_set_dir(LED_W, GPIO_DIRECTION_OUTPUT);
uapi_gpio_set_val(LED_W, GPIO_LEVEL_LOW);
while (1)
{
osDelay(1000);
uapi_gpio_set_val(LED_R, GPIO_LEVEL_HIGH);
uapi_gpio_set_val(LED_B, GPIO_LEVEL_LOW);
uapi_gpio_set_val(LED_W, GPIO_LEVEL_LOW);
osDelay(1000);
uapi_gpio_set_val(LED_R, GPIO_LEVEL_LOW);
uapi_gpio_set_val(LED_B, GPIO_LEVEL_HIGH);
uapi_gpio_set_val(LED_W, GPIO_LEVEL_LOW);
osDelay(1000);
uapi_gpio_set_val(LED_R, GPIO_LEVEL_LOW);
uapi_gpio_set_val(LED_B, GPIO_LEVEL_LOW);
uapi_gpio_set_val(LED_W, GPIO_LEVEL_HIGH);
}
returnNULL;
}
完成后rebuild工程,烧录到板子中测试,发现LED根本不亮。
拿示波器分别测试三个IO口,发现电平是有变化的,所以怀疑是驱动能力不够,检查硬件大概是这样的情况:
所以驱动能力不够是很有可能的。
尝试使用pinctrl来设置驱动能力和上下拉:
也没有把LED点亮。
后来测试发现,是限流电阻太大,然后GPIO的电压也只有1.8V,开发板上的B和W两颗LED点亮电压高于1.8V的,所以导致了无法驱动的问题,程序本身应该是没啥问题的。
所以把LED R前的电阻短路掉,就可以正常点亮R这颗LED了(加不加上面的pinctrl代码都可以点亮),而另外两颗由于电压的关系无法点亮。
最终跟开发板商家确认了,NL001版本的开发板在LED那块设计是存在缺陷的,问题会在后面版本中修复。当然,手头的NL001只能自己改一下电阻和LED来解决问题了。。。
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !