OpenHarmony开发者论坛

标题: 【3】AT32F437 OpenHarmony轻量系统第一个程序:点灯 [打印本页]

作者: 润开鸿_贾佳豪    时间: 2024-8-20 00:02
标题: 【3】AT32F437 OpenHarmony轻量系统第一个程序:点灯
[md]在搭建好AT32F437 OpenHarmony 轻量系统之后,当然要尝试点一下灯了。

## 编写点灯程序

笔者在适配OpenHarmony轻量系统的时候,只对源码的device和vendor目录进行了修改,AT32的app目录笔者放置在了[vendor/tree/master/artery/AT-START-F437/app](https://gitee.com/AT32437_OpenHa ... y/AT-START-F437/app)路径下。

1.分析原理图掌握led灯连接的gpio口,可知PD13、PD14、PD15分别连接这三个灯。
![image.png](https://dl-harmonyos.51cto.com/i ... rocess=image/resize,w_820,h_636)

2.使用AT32437的驱动库初始化gpiod,驱动库的存放路径位于[device/tree/master/soc/artery/at32f4xx/libraries/drivers/src](https://gitee.com/AT32437_OpenHa ... braries/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_OpenHa ... p/0_led_test/main.c

5.打开[vendor/artery/AT-START-F437/app/BUILD.gn](https://gitee.com/AT32437_OpenHa ... T-F437/app/BUILD.gn),把样例注释打开
![image.png](https://dl-harmonyos.51cto.com/i ... rocess=image/resize,w_820,h_264)
然后在[vendor/artery/AT-START-F437/BUILD.gn](https://gitee.com/AT32437_OpenHa ... START-F437/BUILD.gn)中,把样例注释打开

![image.png](https://dl-harmonyos.51cto.com/i ... rocess=image/resize,w_762,h_444)

## 编译烧录程序

```
./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驱动](https://gitee.com/AT32437_OpenHa ... grammer_V3.0.18.zip)

![image.png](https://dl-harmonyos.51cto.com/i ... rocess=image/resize,w_820,h_267)

2.打开ICP烧录工具
![image.png](https://dl-harmonyos.51cto.com/i ... rocess=image/resize,w_820,h_647)

3.点击连接,添加bin文件或者hex文件。开始下载文件到开发板上

![image.png](https://dl-harmonyos.51cto.com/i ... rocess=image/resize,w_820,h_1231)

3.最后完成烧录断开连接

![image.png](https://dl-harmonyos.51cto.com/i ... rocess=image/resize,w_820,h_1236)
[/md]




欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/) Powered by Discuz! X3.5