Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
内核学习营
ADC驱动问题
发布于 2019-03-13 19:06:32 浏览:2864
订阅该版
刚开始学RT—Thread,看了文档里的pin设备和usart设备,跟着例程都下载测试了 可是到了ADC设备里,driver文件夹里没有了和ADC相关的代码了,是要自己添加驱动了吗? ``` struct rt_adc_device; struct rt_adc_ops { rt_err_t (*enabled)(struct rt_adc_device *device, rt_uint32_t channel, rt_bool_t enabled); rt_err_t (*convert)(struct rt_adc_device *device, rt_uint32_t channel, rt_uint32_t *value); }; ```DeviceDriver文件夹里面的adc.h中这俩函数要自己写吗? 纯新手,希望大家指导一下
查看更多
7
个回答
默认排序
按发布时间排序
00lnn
2019-03-13
这家伙很懒,什么也没写!
>不知道你使用的是哪个BSP?有的bsp还没支持ADC驱动。新的STM32框架下BSP支持ADC,在stm32/bsp路径下。 ... --- 我使用的是4.0的,BSP下的stm32f40x。里面没见和gpio.c这样的ADC接口代码,如果没有的就要自己完全写了吗:funk:
00lnn
2019-03-13
这家伙很懒,什么也没写!
我自己模仿gpio.c写了一个c文件如下 ``` #include
#include
#include "board.h" #include "adc_init.h" /* ADC GPIO define */ #define ADC123_IN0 GPIO_Pin_0 #define ADC123_IN0_GPIO GPIOA #define ADC123_IN0_GPIO_RCC RCC_AHB1Periph_GPIOA //GPIOA时钟 #define RCC_APBPeriph_ADC1 RCC_APB2Periph_ADC1 //ADC1时钟 /* STM32 ADC driver */ struct stm32_adc { ADC_TypeDef *adc_device; }; static rt_err_t stm32_adc_enable(struct rt_adc_device *device, rt_uint32_t channel, rt_bool_t enabled) { struct stm32_adc* adc; RT_ASSERT(device != RT_NULL); adc = (struct stm32_adc *)device->parent.user_data; if(enabled==RT_TRUE) { ADC_Cmd(adc->adc_device, ENABLE);//开启AD转换器 }else if(enabled==RT_FALSE) { ADC_Cmd(adc->adc_device, DISABLE);//关闭AD转换器 } return RT_EOK; } static rt_err_t stm32_adc_convert(struct rt_adc_device *device, rt_uint32_t channel, rt_uint32_t *value) { struct stm32_adc* adc; RT_ASSERT(device != RT_NULL); adc = (struct stm32_adc *)device->parent.user_data; /*ADC1,ADC通道,480个周期,提高采样时间可以提高精确度*/ ADC_RegularChannelConfig(adc->adc_device,channel,1,ADC_SampleTime_480Cycles); ADC_SoftwareStartConv(adc->adc_device); //使能指定的ADC1的软件转换启动功能 // while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束 *value = (rt_uint32_t)ADC_GetConversionValue(adc->adc_device); //返回最近一次ADC1规则组的转换结果 return RT_EOK; } const static struct rt_adc_ops stm32_adc_ops= { stm32_adc_enable, stm32_adc_convert, }; /* 定义ADC设备 AD1 */ struct rt_adc_device AD1; static void RCC_Configuration(void) { /* Enable ADC1 GPIO Clocks */ RCC_AHB1PeriphClockCmd(ADC123_IN0_GPIO_RCC, ENABLE); //使能GPIOA时钟 /* Enable ADC1 Clock */ RCC_APB2PeriphClockCmd(RCC_APBPeriph_ADC1, ENABLE); //使能ADC1时钟 RCC_APB2PeriphResetCmd(RCC_APBPeriph_ADC1,ENABLE); //ADC1复位 RCC_APB2PeriphResetCmd(RCC_APBPeriph_ADC1,DISABLE); //复位结束 }//针对不同的ADC应使能对应的时钟,改变相应的参数 static void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin=ADC123_IN0;//PA0 通道0 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AN;//模拟输入 GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;//不要上下拉 GPIO_Init(ADC123_IN0_GPIO, &GPIO_InitStructure); }//使用不同ADC改变对应通道 static void ADC_Configuration(void) { ADC_CommonInitTypeDef ADC_CommonInitStructure; ADC_InitTypeDef ADC_InitStructure; ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;//独立模式 ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;//两个采样阶段之间的延迟5个时钟 ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled; //DMA失能 ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div4;//预分频4分频。ADCCLK=PCLK2/4=84/4=21Mhz,ADC时钟最好不要超过36Mhz ADC_CommonInit(&ADC_CommonInitStructure);//初始化 ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;//12位模式 ADC_InitStructure.ADC_ScanConvMode = DISABLE;//非扫描模式 ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;//关闭连续转换 ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;//禁止触发检测,使用软件触发 ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//右对齐 ADC_InitStructure.ADC_NbrOfConversion = 1;//1个转换在规则序列中 也就是只转换规则序列1 ADC_Init(ADC1, &ADC_InitStructure);//ADC初始化 } struct stm32_adc adc_one; int stm32_hw_adc_init(void) { struct stm32_adc *adc; RCC_Configuration( ); GPIO_Configuration( ); ADC_Configuration(); adc = &adc_one; AD1.ops = &stm32_adc_ops; /* register ADC Device */ rt_hw_adc_register(&AD1,"TR1",AD1.ops,adc); return 0; } ``` 在stm32_adc_convert函数里面会卡在等待转换那一行,注释掉能读出来数据但是不对:(
yqiu
2019-03-13
这家伙很懒,什么也没写!
你用的 BSP 比较旧了,后面会被移除,使用这下面的 BSP 吧,[https://github.com/RT-Thread/rt-thread/tree/master/bsp/stm32](https://github.com/RT-Thread/rt-thread/tree/master/bsp/stm32) 其中 ADC 驱动都已经做好了。
00lnn
2019-03-14
这家伙很懒,什么也没写!
>你用的 BSP 比较旧了,后面会被移除,使用这下面的 BSP 吧,https://github.com/RT-Thread/rt-thread/tree/ ... --- 好的,谢谢啦 ^_^
00lnn
2019-03-14
这家伙很懒,什么也没写!
>你用的 BSP 比较旧了,后面会被移除,使用这下面的 BSP 吧,https://github.com/RT-Thread/rt-thread/tree/ ... --- ![](C:\Users\Li123\Desktop\新建文件夹) 我把里面的工程拷到其他位置但是也把需要的文件转过来了,会出现找不到路径的问题。可是我已经把这个文件的路径包含进去了
00lnn
2019-03-14
这家伙很懒,什么也没写!
谢谢两位的回复,我在原有的程序里修改了一处定义就正常了 ``` struct stm32_adc adc_one= { ADC1, }; ```
撰写答案
登录
注册新账号
关注者
0
被浏览
2.9k
关于作者
00lnn
这家伙很懒,什么也没写!
提问
7
回答
31
被采纳
0
关注TA
发私信
相关问题
1
【内核学习】rtthread内核移植记录-STM32F103ZET6-HAL库
2
《内核学习营》+水一方+自用STM32F103VC 板RT-Thread内核移植分享
3
《内核学习营》+水一方+项目中创建标准的 RT-Thread工程
4
内核学习营+坦然+探索者stm32f407板子RT-thread循环点亮led灯
5
<内核学习营>+坦然+探索者stm32f407板子RT-thread串口字符点灯
6
<内核学习营>+坦然+探索者stm32f407板子RT-thread的pwm点灯实验
7
<内核学习营>+坦然+探索者stm32f407板子RT-thread串口实验
8
<内核学习营>+坦然+野火stm32f103板子RT-thread读写SD卡实验
9
<内核学习营>+坦然+探索者stm32f407板子RT-thread的RTC闹钟实验
10
【内核学习营】+王秀峰+led_rgb
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
RT-Thread项目助手v0.2.0 - 支持Env Windows
2
RttreadV5.10上,GD32F450Z RTC时间显示问题
3
rt-smart启动流程分析
4
EtherKit快速上手PROFINET
5
RTThread USB转串口无法接收数据
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
PWM
cubemx
flash
freemodbus
BSP
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
813
个答案
177
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
149
次被采纳
本月文章贡献
出出啊
1
篇文章
2
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
3
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部