在搭建好AT32F437 OpenHarmony 轻量系统之后,当然要尝试点一下灯了。
编写点灯程序
笔者在适配OpenHarmony轻量系统的时候,只对源码的device和vendor目录进行了修改,AT32的app目录笔者放置在了vendor/tree/master/artery/AT-START-F437/app路径下。
1.分析原理图掌握led灯连接的gpio口,可知PD13、PD14、PD15分别连接这三个灯。
2.使用AT32437的驱动库初始化gpiod,驱动库的存放路径位于device/tree/master/soc/artery/at32f4xx/libraries/drivers/src路径下
//开启GPIOD的时钟
crm_periph_clock_enable(CRM_GPIOD_PERIPH_CLOCK, TRUE);
//gpio结构体
gpio_init_type gpio_config;
//io管脚
gpio_config.gpio_pins = GPIO_PINS_13 | GPIO_PINS_14 | GPIO_PINS_15;
//输出模式
gpio_config.gpio_mode = GPIO_MODE_OUTPUT;
//无上下拉电阻
gpio_config.gpio_pull = GPIO_PULL_NONE;
//设置为推挽输出模式,即引脚可以提供高电平和低电平输出。
gpio_config.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
/*
GPIO_DRIVE_STRENGTH_MODERATE 对应适中的电流推动/吸入能力
GPIO_DRIVE_STRENGTH_STRONGER 对应较大的电流推动/吸入能力
GPIO_DRIVE_STRENGTH_MAXIMUM 对应极大的电流推动/吸入能力
如果 IO 速度设置为最大的推动力设置,且负载较小时,易在 IO 上产生过冲振铃现象,存在影响应用的可能性
*/
gpio_config.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
//初始化gpio
gpio_init(GPIOD, &gpio_config); // group C
3.然后操作数据寄存器odt控制输出高低电平点亮熄灭led
while (TRUE) {
printf("GpioTask: LED_On\n");
//通过GPIO输入数据寄存器odt输出高电平,也可以通过gpio_bits_set来输出高电平(可以查看gpio_bits_set定义)
GPIOD->odt |= GPIO_PINS_13;
GPIOD->odt |= GPIO_PINS_14;
GPIOD->odt |= GPIO_PINS_15;
//gpio_bits_set(GPIOD,GPIO_PINS_1);
//sleep(1);
//delay_ms(10);
//delay_sec(1);
osDelay(80);
printf("GpioTask: LED_Off\n");
//通过GPIO输入数据寄存器odt输出高电平,也可以通过gpio_bits_reset来输出高电平(可以查看gpio_bits_reset定义)
GPIOD->odt &= ~GPIO_PINS_13;
GPIOD->odt &= ~GPIO_PINS_14;
GPIOD->odt &= ~GPIO_PINS_15;
//gpio_bits_reset(GPIOD,GPIO_PINS_1);
//sleep(1);
//delay_ms(10);
//delay_sec(1);
osDelay(80);
}
4.具体实现代码请查看
https://gitee.com/AT32437_OpenHarmony/vendor/blob/master/artery/AT-START-F437/app/0_led_test/main.c
5.打开vendor/artery/AT-START-F437/app/BUILD.gn,把样例注释打开
然后在 vendor/artery/AT-START-F437/BUILD.gn中,把样例注释打开
编译烧录程序
./build.sh --product-name AT-START-F437 --ccache --no-prebuilt-sdk
编译好的固件是out\atstartf437\AT-START-F437\bin
的AT-START-F437.bin
文件
1.AT-START-F437开发板自带块ATlink调试接口。首先安装ATlink驱动
2.打开ICP烧录工具
3.点击连接,添加bin文件或者hex文件。开始下载文件到开发板上
3.最后完成烧录断开连接