【雅特力AT32】搭建模板工程及GPIO点灯操作
目录
AT32模板工程建立及点灯操作
建立AT32模板工程
AT32点灯操作
- LED原理图
- GPIO寄存器
- LED源码分析
建立AT32模板工程
从0到编译运行详细搭建保姆教程:
【雅特力AT32】Keil 环境:搭建标准库模板工程、使用 AT-Link、Debug 里选择 CMSIS-DAP调试器
下面做一个简单的介绍,简单搭建够用了。
在 ArteryTek 提供的固件库 BSP 中都默认建立好了常用 IDE 的模板工程。 BSP 可从雅特力科技
官方网站→产品讯息→车载型 MCU→AT32A4xx 系列获取。
BSP 中创建 at32_ide/eclipse_gcc/Keil_v5/Keil_v4/IAR_6.10/IAR_7.4/IAR_8.2/IAR_9.3 的模板工程,存放路径为 AT32A423_Firmware_Library_V2.x.x\project\at_start_a4xx\templates,打开对应工程的文件夹并点击工程文件即可打开对应的 IDE 工程。如下是 Keil_v5 工程示例:
工程内添加的内容描述如下:
① at32a423_clock.c 时钟配置文件,设置了默认的时钟频率及时钟路径。
② at32a423_int.c 中断文件,默认编写了部分内核中断函数的代码流程。
③ main.c 模板工程的主代码文件。
④ at32a423_board.c 板级配置文件,设置了 AT-START 上的按键和 LED 等常用硬件配置。
⑤ firmware 下的 at32a423_xx.c 是各片上外设的驱动文件。
⑥ system_at32a423.c 系统初始化文件。
⑦ startup_at32a423.s 启动文件。
⑧ readme.txt工程的明文件,记录模板工程一些应用功能、设置方式以及关联应用笔记(ApNote)等信息。
除了 templates 外,BSP 还按照外设分类,提供了大量的 examples 示例代码(Keil_v5 工程文件)供用户参考,用户只需要直接打开即可。存放路径为 :
AT32A423_Firmware_Library_V2.x.x\project\at_start_a4xx\examples
注意:关于 BSP 的更多详细说明,请参考《AT32A423 固件库 BSP&Pack 应用指南》的“4 BSP 使用简述”
章节,存放路径为雅特力科技官方网站→产品讯息→车载型 MCU→AT32A4xx 系列下载的 BSP 解压后*\AT32A423_Firmware_Library_Vx.x.x\document**。*
AT32点灯操作
LED原理图
低电平导通,LED点亮。
GPIO寄存器
查看源码,开灯能理解,那么关灯同样是清除,怎么理解?
写’1’的位其对应 ODT 寄存器位会清除,清除后那个位变成0还是1,肯定是0啊!那不导通吗?
uint16_t为16位 SCR寄存器要看下面这行 为1的位置起即高电平 所以灯熄灭
LED源码分析
* @brief configure led gpio* @param led: specifies the led to be configured.* @retval none*/
void at32_led_init(led_type led)
{gpio_init_type gpio_init_struct; //GPIO配置结构体/* enable the led clock */crm_periph_clock_enable(led_gpio_crm_clk[led], TRUE); //时钟使能/* set default parameter */gpio_default_para_init(&gpio_init_struct); //GPIO默认初始化/* configure the led gpio */gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;//强输出gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL; //推挽输出(常用)gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT; //输出模式gpio_init_struct.gpio_pins = led_gpio_pin[led]; //引脚gpio_init_struct.gpio_pull = GPIO_PULL_NONE; //不用上下拉gpio_init(led_gpio_port[led], &gpio_init_struct); //GPIO初始化
}/*** @brief turns selected led on.* @param led: specifies the led to be set on.* this parameter can be one of following parameters:* @arg LED2* @arg LED3* @arg LED4* @retval none*/
void at32_led_on(led_type led)
{if(led > (LED_NUM - 1))return;//检查指定 LED 的 GPIO 引脚是否有效if(led_gpio_pin[led]) led_gpio_port[led]->clr = led_gpio_pin[led];//写入 clr 寄存器来将对应的 LED 点亮
}/*** @brief turns selected led off.* @param led: specifies the led to be set off.* this parameter can be one of following parameters:* @arg LED2* @arg LED3* @arg LED4* @retval none*/
void at32_led_off(led_type led)
{if(led > (LED_NUM - 1))return;if(led_gpio_pin[led])/* GPIO 端口 led_gpio_port[led]为1的位清除,即将对应的 ODT 寄存器位清除 */led_gpio_port[led]->scr = led_gpio_pin[led];
}/*** @brief turns selected led toggle.* @param led: specifies the led to be set off.* this parameter can be one of following parameters:* @arg LED2* @arg LED3* @arg LED4* @retval none*/
void at32_led_toggle(led_type led)
{if(led > (LED_NUM - 1))return;if(led_gpio_pin[led])led_gpio_port[led]->togr = led_gpio_pin[led];
}