RT_thread studio 中的ADC设备驱动

写到前面的话,在使用RTT studio中的CUBEMX settings,打开cubemx后,配置好相关外设的时候,一定要关闭cubemx,关闭,关闭!!!这点非常重要,然后RTT studio就会提醒发生了改变,点击确定即可。

记录一下最近在RTT studio中使用ADC设备驱动时,遇见的一些问题。笔者这里使用的开发板是野火的STM32F407霸天虎。

1.创建一个标准版本新项目,选择基于芯片,选择stm32f407zg,RTT版本选择4.1.1,根据芯片的描述,这里的RTT版本必须选择4.1.0版本之后的。否则会出现各种问题,当然不建议使用最新的5.1.1的。这个也有问题。

2.RT_thread settings,组件里面打开相应的设备,这里的是ADC设备。

3.在board.h文件里面手动打开如下的宏。然后上面是官方给出是示例,如何使用这个ADC设备。

在board.h里面每一个设备官方都有说明,如何去操作这个设备。

/** if you want to use adc you can use the following instructions.
 *
 * STEP 1, open adc driver framework support in the RT-Thread Settings file
 *
 * STEP 2, define macro related to the adc
 *                 such as     #define BSP_USING_ADC1
 *
 * STEP 3, copy your adc init function from stm32xxxx_hal_msp.c generated by stm32cubemx to the end of board.c file
 *                 such as     void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)
 *
 * STEP 4, modify your stm32xxxx_hal_config.h file to support adc peripherals. define macro related to the peripherals
 *                 such as     #define HAL_ADC_MODULE_ENABLED
 *
 */

#define BSP_USING_ADC1
/*#define BSP_USING_ADC2*/
/*#define BSP_USING_ADC3*/

4.打开cubemx,配置ADC,选择ADC1,IN1,时钟选择外部时钟,其他的选项就不重要了。生成代码后,就直接关闭cubemx。时钟选择HSE,频率随便配置,我这里配置成168,。我觉得这里有个坑就是,一旦你打开cubemx配置,那么意味着你的所以都要·重新配置,包括在创建项目的时候已经配置好的串口。这里需要你重新打开USART1,选择异步模式。(笔者刚开始的时候,选择USART1作为打印串口)

当关闭了cubemx后,这里记得一定要关闭cubemx,RTT studio中就会出现如下图所示的,提示。点击确定。

提示,一旦使用cubemx重新配置后,想要继续使用串口1打印调试信息,那么这个时候就必须在cubemx中重新配置USART1,配置为异步模式。其他的不用配置了,NVIC也不用了

5.然后把cubemx->adc.c文件里面的HAL_ADC_MSPINIT()复制粘贴在board.c文件里面。

好了,现在可以在mian里面使用ADC设备了。并且在finsh里面使用list_device,.也能发现adc1设备是打开的。

#include <rtthread.h>
#include <rtdevice.h>
#define DBG_TAG "main"
#define DBG_LVL DBG_LOG
#include <rtdbg.h>

int main(void)
{
    rt_device_t adc_demo=RT_NULL;
        rt_err_t ret=RT_EOK;
        rt_uint32_t value,vol;
        adc_demo = (rt_adc_device_t)rt_device_find("adc1");
        if(adc_demo==RT_NULL)
            rt_kprintf("adc1 acn not find\n");
        ret=rt_adc_enable(adc_demo,1);
        value = rt_adc_read(adc_demo, 1);
        rt_kprintf("the value is:%d\n",value);
        vol=value * 330/(1<<12);
        rt_kprintf("vol is :%d\n",vol);
       ret= rt_adc_disable(adc_demo, 1);
        return 0;
//    int count = 1;
//
//    while (count++)
//    {
//        LOG_D("Hello RT-Thread!");
//        rt_thread_mdelay(10000);
//    }
//
//    return RT_EOK;
}

6.在终端里面也能看见打印的信息了,使用官方给出的adc probe adc1,也能找到设备。

最后检查stm32f4xx_hal_conf.h里面开启了#define HAL_ADC_MODULE_ENABLED。

提示:使用了cubemx后,之前的stm32f4xx_hal_conf.h就变成了stm32f4xx_hal_conf_bank.h,在drivers里面。stm32f4xx_hal_conf.h在cubemx文件里面。

附录:

如上图所示,当使用cubemx生成代码后,在src中是看不见adc.c的,如果想要打开adc,c有两种办法,一种是打开adc,h,打开MX_ADC_INIT的声明,就自然的打开adc.c了,另外一种就是在sconscript中重写一下代码。

总结:以上的虽然很简单,但是新手一不注意就会踩坑。需要注意细节的部分。官方文档里面没有这么详细的描述,但是在我们刚开始做的时候,官方的文档的确可以作为一份参考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值