[APM32F407]RTT-Studio环境下的APM32外设驱动使用指南(1)

1. 简介

由于自己平时在项目中经常使用 APM32 系列的 MCU,而且经常是和 RT-Thread 系统一起使用,慢慢的就对 APM32 系列 MCU RT-Thread 外设驱动使用熟悉了起来。

目前,RTT-Studio 环境已经支持了 APM32F0/F1/F4/E1/S1 系列的 MCU,每个系列 MCU RTT驱动使用方法基本相似。下面我就以 APM32F407 这款 MCU 为例,介绍下在 RTT-Studio 环境下如何使用 APM32 的外设驱动,希望能帮助到大家快速把 APM32 RT-Thread 驱动使用起来。

对于每个外设驱动的使用和测试,大家可以配合 RTT 的官方文档中心(https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/README)的设备和驱动模块进行阅读,文档中心对于每一个驱动如何使用和测试都有详细的介绍。

2. 新建RTT-Studio工程

下面是以 APM32F407 进行介绍,所以需要先安装 APM32F4 最新的 RTT-Studio 软件支持包。

2.1 下载APM32F4软件支持包

打开 SDK 管理器,然后找到 APM32F4 的软件支持包,然后点击安装即可。

2.2 基于芯片新建一个 APM32F407 的工程

控制台串口默认是UART1,如果想要更改控制台串口号,下面会详细介绍,这里先默认UART1。然后点击完成即可创建一个 APM32F407 的工程。

3. apm32_msp.c 文件介绍

新建完工程之后,驱动目录结构如下:

可以看到,已经支持了大部分的外设驱动了,如 can/flash/eth/pwm/sdio 等等外设驱动。其中有一个文件是比较重要的, apm32_msp.c 文件,打开这个文件就可以了解到这个文件的作用就是初始化外设时钟和 GPIO 。比如用到 spi 外设,那么我们就必须要在这个文件里面添加你自己板子所使用到的 spi 外设 GPIO 口的初始化。

我们在后面有很多用到的外设驱动,关于外设引脚的初始化代码,都可以编写放进这个文件中。官方也已经给出了这些外设的部分引脚的初始化代码了,如果我们所使用的硬件引脚和给出的代码是一致的,那么就不需要更改给出的示例代码,如果所使用的引脚不一样,就需要自己编写引脚的初始化代码了。

为什么编写驱动的时候,没有把外设 GPIO 口和对应外设的时钟初始化都编写到对应的驱动程序中呢?这样用户在使用时不就可以编写更少的代码了吗?

关于这一点,主要是因为每个人所使用的硬件是不一样的,比如说有的人可能使用的是 spi1 外设,也可能使用 spi2 外设,而且就算是 spi1 外设,所使用的引脚也可能不同,因为 spi1 外设的 GPIO 引脚很可能有多个引脚可选。简单来说就是关于这部分代码的不确定性太大了,如果在驱动程序中把所有的可能都写出来,会导致驱动程序太过复杂和冗余。所以人家在编写这部分驱动代码的时候,把 GPIO 引脚初始化的代码给剥离出来了,让使用者自己去编写这部分代码。

当然有一些简单的外设驱动,也可以把引脚的初始化相关的代码给写到驱动程序中去。APM32的外设驱动,如 adc/dac/hwtimer 这些驱动,底层引脚初始化和外设时钟的开启就是写到了驱动程序里面的。

4. UART设备

新建完工程之后,默认是已经打开了UARTPIN设备的,因为这两个外设是最常用的。只要编译下载,就可看到串口打印的输出信息。

对于这两个外设的 API 如何使用,可以参考RTT的官方文档,这里不再介绍。下面重点介绍的是如何修改控制台的输出串口,因为在实际的项目中,很多时候控制台所使用的串口并不是 UART1

4.1 确定串口引脚,修改串口GPIO初始化代码

我们根据原理图,确定自己所使用的串口调试具体是哪个串口,和对应的串口引脚。然后我们在 apm32_msp.c 文件中,添加串口引脚的初始化代码即可。比如,我的板子就用的UART6,那我们在这个文件添加UART6的引脚初始化代码。

官方所提供的示例代码中,已经提供了 UART1/UART2 的引脚初始化了,我们在 apm32_msp.c 文件中的apm32_usart_init 函数添加 UART6 的引脚初始化代码:

void apm32_usart_init(void)
{
    GPIO_Config_T GPIO_ConfigStruct;
#ifdef BSP_USING_UART6
    RCM_EnableAHB1PeriphClock(RCM_AHB1_PERIPH_GPIOC);
    RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_USART6);

    GPIO_ConfigPinAF(GPIOC, GPIO_PIN_SOURCE_6, GPIO_AF_USART6);
    GPIO_ConfigPinAF(GPIOC, GPIO_PIN_SOURCE_7, GPIO_AF_USART6);

    GPIO_ConfigStruct.pin = GPIO_PIN_6 | GPIO_PIN_7;
    GPIO_ConfigStruct.mode = GPIO_MODE_AF;
    GPIO_ConfigStruct.otype = GPIO_OTYPE_PP;
    GPIO_ConfigStruct.pupd = GPIO_PUPD_UP;
    GPIO_ConfigStruct.speed = GPIO_SPEED_50MHz;
    GPIO_Config(GPIOC, &GPIO_ConfigStruct);
#endif
}

4.2 在board.h中修改UART端口号

当然,如果我们在新建工程时,就已经选择了UART6作为控制台的串口,那么我们只需要做完第一步,把所需要的UART引脚进行初始化即可,下面的步骤就都不需要做了。

4.3 在 rtconfig.h 文件中修改控制台所需要的串口设备

修改完之后,重新编译下载,然后可以看到串口打印信息如下:

而且,也可以看到串口设备变为 uart6 了。

5. ADC设备
5.1 使能ADC外设驱动

打开 RT-Thread Setting 配置文件,然后找到 组件 -> 设备驱动程序 -> 使用ADC设备驱动程序,开启该驱动程序即可。

5.2 在board.h文件中定义ADC宏

board.h文件,都是定义和板级硬件所使用的宏定义,如下我们定义 BSP_USING_ADC1这个宏。

5.3 ADC设备测试方法

关于ADC设备的测试和使用示例,可以查阅RTT的文档。下面我简单介绍下,怎么测试我们的ADC外设驱动是否正常工作了。

在命令行终端,可以输入adc命令,然后有一下的使用方法:

adc probe <adc_name>   - probe adc by name
adc read <channel>     - read adc value on the channel
adc disable <channel>  - disable adc channel
adc enable <channel>   - enable adc channel

我们对照着输入上面的命令,即可获取ADC采样的电压值。

我们使用的是adc1外设,然后adc1外设通采样道对应的是哪个GPIO引脚,大家可以查看 APM32F407 的数据手册,当然也可称查看ADC外设的驱动代码,如下:

然后,我们在串口终端输入下面的命令,读取PA5(通道5)口的电压值。

可以看到,PA5引脚接3.3VGND读取到的数值是不一样的,当然这个数据还需要根据12位的分辨率,然后进行电压值的转换。计算公式:vol = value * 3300 / 1<<12)
---------------------
作者:luobeihai
链接:https://bbs.21ic.com/icview-3297252-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值