社区首页
技术讨论创新帖
全部新帖
资料区
社区活动
联系管理员
★ 社区积分制度
★ 新手必读
★ 申请版主★
请
登录
后使用快捷导航
没有帐号?
注册
首页
|
电子技术
|
嵌入式
模拟电子
单片机
电源管理
传感器
半导体
电子应用
|
工业控制
物联网
汽车电子
网络通信
医疗电子
手机便携
测试测量
安防电子
家用电子
机器人
新能源
电子头条
|
社区
|
论坛
测评
博客
大学堂
|
下载
|
下载中心
电路图
精品文集
电路图
|
参考设计
|
Datasheet
|
活动
|
直播
datasheet
datasheet
文章
搜索
登录
注册
中文
En
论坛
切换旧版
电子工程世界-论坛
»
论坛
›
电子技术交流
›
单片机
›
GD32 MCU
›
(番外8)GD32L233评测-ADC和DMA(官方没有例程哦)
返回列表
发新帖
回复
阅
2497
|
回
0
韵湖葱白
当前离线
一粒金砂(高级)
最后登录
2025-2-6
在线时间
24 小时
威望
272分
芯积分
629分
(兑换)
E金币
50枚
(兑换)
(兑换)
好友
0
韵湖葱白
114
帖子
0
TA的资源
一粒金砂(高级)
+ 好友
私信
楼主
发表于2022-2-10 08:48
只看该作者
(番外8)GD32L233评测-ADC和DMA(官方没有例程哦)
[复制链接]
## 前言 开工第一天,今天是DMA方式的ADC采样。 ## 什么是ADC? ADC即模拟数字转换器,ADC的精度一般用位来表示,位数越多,表示相同模拟量范围内的采样点数越多,那么相应的精度就越高。 比如:12位表示的范围是0 ~ 2^12 (4096),8位表示的范围是0 ~ 2^8 (256),前者的精度是后者的16倍。 ADC一般需要配置的内容包括: 1. IO配置(时钟,模拟输入) 2. ADC参数配置(模式-扫描模式,连续模式;触发方式;通道配置-规则组or注入组;ADC校正) 3. 中断和DMA(使能)配置 【注】ADC的规则组和注入组的区别可简单理解为:规则组是周期执行的程序,注入组是中断程序。 ![](https://gitee.com/anyangchina/ppp/raw/master/20210917规则组和注入组.jpg) ## 什么是DMA? DMA即直接存储器访问控制器,DMA提供了一种硬件的方式在外设和存储器之间或者存储器和存储器之间传输数据,而无需CPU的介入,避免了CPU多次进入中断进行大规模的数据拷贝,最终提高整体的系统性能。 简单而言,DMA相当于是外请(DMA硬件)的搬运工(数据拷贝),节约宝贵的CPU资源。 DMA一般需要配置的内容包括: 1. IO配置(时钟) 2. DMA参数配置(拷贝的方向,内容,地址,通道,模式和数量等) 3. 中断(使能)配置 DMA的配置需要注意通道的匹配: ![STM32F103 DMA通道配置](https://gitee.com/anyangchina/ppp/raw/master/20210917STM32F103DMA通道定义.jpg) ![GD32F450 DMA通道配置](https://gitee.com/anyangchina/ppp/raw/master/20210917GD32F450DMA通道定义.jpg) 注意,在GD32L233中新增了一个DMAMUX的设计,即在DMA控制器前一级增加了的多路选择器,相比如上图,它的好处是更灵活,缺点当然也是更灵活了。 ![GD32L233 DMAMUX结构](https://gitee.com/anyangchina/embp/raw/master/20220207_GD32L233DMAMUX.jpg) **从设计的角度来看,这种配置个人觉得固定成一张表更好理解和处理。** ## ADC如何DMA? ### 基本说明 先把DMA的概念代入,ADC属于**外设**,我们一般使用ADC的DMA是把ADC的采样数据传送到内存中供程序使用,那么它的处理数据链是:ADC通道数据地址-DMA缓存数据-滤波-业务层数据,**DMA的确是省了很多软件的事**。 ### 架构和流程 基本架构: ![](https://gitee.com/anyangchina/ppp/raw/master/20210917ADC架构.jpg) 流程和数据结构: ![](https://gitee.com/anyangchina/ppp/raw/master/20210917ADCDMA.jpg) ### 代码设计 由于单片机内置了CPU温度值,Vrefint和Vbatt(STM32无Vbatt)的采样通道,这里的示例用这几个通道来做示例。 GD32L233的温度计算公式跟GD32F450不一样,在用户手册中写清楚了: ``` 温度(°C) = ((Dtemperature – D30) / Avg_Slope) + 30 ``` D30在芯片内固定: ``` #define ADC_TEMP_CALIBRATION_VALUE REG16(0x1FFFF7F8) ``` #### adc和dma adc配置: ``` void adc1_init(int32_t channel_num) { /* enable ADC clock */ rcu_periph_clock_enable(RCU_ADC); rcu_periph_clock_enable(RCU_GPIOA); gpio_mode_set(GPIOA, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO_PIN_0); /* config ADC clock */ rcu_adc_clock_config(RCU_ADCCK_APB2_DIV16); /* ADC SCAN function enable */ adc_special_function_config(ADC_SCAN_MODE, ENABLE); /* conyinuous mode */ adc_special_function_config(ADC_CONTINUOUS_MODE, ENABLE); adc_external_trigger_config(ADC_REGULAR_CHANNEL, ENABLE); adc_external_trigger_source_config(ADC_REGULAR_CHANNEL, ADC_EXTTRIG_REGULAR_NONE); adc_data_alignment_config(ADC_DATAALIGN_RIGHT); adc_channel_length_config(ADC_REGULAR_CHANNEL, channel_num); /* ADC temperature and Vrefint enable */ adc_channel_16_to_19(ADC_TEMP_CHANNEL_SWITCH, ENABLE); adc_channel_16_to_19(ADC_INTERNAL_CHANNEL_SWITCH, ENABLE); adc_channel_16_to_19(ADC_VBAT_CHANNEL_SWITCH, ENABLE); adc_regular_channel_config(0, ADC_CHANNEL_adc_test, ADC_SAMPLETIME_239POINT5); adc_regular_channel_config(1, ADC_CHANNEL_cpu_temper, ADC_SAMPLETIME_239POINT5); adc_regular_channel_config(2, ADC_CHANNEL_cpu_vref, ADC_SAMPLETIME_239POINT5); adc_regular_channel_config(3, ADC_CHANNEL_vbatt, ADC_SAMPLETIME_239POINT5); /* enable ADC interface */ adc_enable(); adc_dma_mode_enable(); delay_ms(1U); /* ADC calibration and reset calibration */ adc_calibration_enable(); adc_software_trigger_enable(ADC_REGULAR_CHANNEL); } ``` DMA配置: ``` void adc1_dma_init(uint32_t addr, uint32_t number) { /* ADC_DMA_channel configuration */ dma_parameter_struct dma_parameter; /* enable DMA0 clock */ rcu_periph_clock_enable(RCU_DMA); /* ADC DMA_channel configuration */ dma_deinit(DMA_CH0); /* initialize DMA data mode */ dma_struct_para_init(&dma_parameter); dma_parameter.direction = DMA_PERIPHERAL_TO_MEMORY; dma_parameter.periph_addr = (uint32_t)(&ADC_RDATA); dma_parameter.periph_inc = DMA_PERIPH_INCREASE_DISABLE; dma_parameter.periph_width = DMA_PERIPHERAL_WIDTH_32BIT; dma_parameter.memory_addr = addr; dma_parameter.memory_inc = DMA_MEMORY_INCREASE_ENABLE; dma_parameter.memory_width = DMA_MEMORY_WIDTH_32BIT; dma_parameter.number = number; dma_parameter.priority = DMA_PRIORITY_HIGH; dma_parameter.request = DMA_REQUEST_ADC; dma_init(DMA_CH0, &dma_parameter); dma_circulation_enable(DMA_CH0); dma_interrupt_enable(DMA_CH0, DMA_CHXCTL_FTFIE); nvic_irq_enable(DMA_Channel0_IRQn, 2); dma_channel_enable(DMA_CH0); } ``` #### 业务代码 头文件: ``` #define COFF_33_4096_10000000x 8057 ///< 3.3/4096 (10000000) #if defined(GD32M0) #define COFF_VBATT3 #define CPU_TEMP_AD_BASE_1000x 30000 ///< 30度 #define ADC_TEMP_CALIBRATION_VALUE REG16(0x1FFFF7F8) #define GET_CPU_TEMPERATURE(data) CPU_TEMP_AD_BASE_1000x + (data - (int32_t)ADC_TEMP_CALIBRATION_VALUE) * COFF_1_4096_10000000x / 10 #define GET_CPU_VREF(data) COFF_33_4096_10000000x*data/10000 #define GET_CPU_VBATT(data) COFF_33_4096_10000000x*data*COFF_VBATT/10000 #define ADC_CHANNEL_adc_test ((uint8_t)ADC_CHANNEL_1) #define ADC_CHANNEL_cpu_temper((uint8_t)ADC_CHANNEL_16) #define ADC_CHANNEL_cpu_vref ((uint8_t)ADC_CHANNEL_17) #define ADC_CHANNEL_vbatt ((uint8_t)ADC_CHANNEL_18) #endif ``` DMA中断函数: 略 ## 测试结果 数据扩大1000倍,其中2~4依次是温度,参考电压和电池电压。 ``` adc = [1143] [23654] [1198] [3304] adc = [1144] [22677] [1198] [3304] adc = [1144] [22922] [1198] [3304] adc = [1144] [23410] [1198] [3304] adc = [1144] [23654] [1198] [3304] adc = [1144] [22922] [1198] [3304] ``` ![](https://gitee.com/anyangchina/embp/raw/master/20220207_GD32L233ADC测试结果.gif) ![](https://gitee.com/anyangchina/ppp/raw/master/文章EOF.gif) ![](https://gitee.com/anyangchina/ppp/raw/master/一键三连S.gif)
兆易
此帖出自
GD32 MCU论坛
点赞
关注
(0)
回复
分享
扫一扫,分享给好友
复制链接分享
链接复制成功,分享给好友
举报
提升卡
变色卡
千斤顶
返回列表
发新帖
回复
您需要登录后才可以回帖
登录
|
注册
发表回复
回帖后跳转到最后一页
活动
更多>>
DigiKey 应用探索站 | 无线技术盛宴第二趴
有奖直播 | ADI 超低功耗 MCU MAX326xx 系列介绍
走近 AI 重磅新品 STM32N6,解锁在 MCU 部署高性能、节能型边缘 AI!答题有好礼~还有开发板等你拿!
Microchip 直播|多相降压电源控制技术的发展与探讨 报名中!
安世半导体智能工业应用探索站,闯关赢好礼!
24年年终盘点来啦!精选强推:原创、测评、拆解、视频、资料
PI 电源小课堂:集成式半桥驱动IC BridgeSwitch 2, 助力高效永磁同步电机逆变器的设计
Microchip喊你探索dsPIC33A 芯片,70份好礼等你赢!
开源项目
更多>>
使用 ON Semiconductor 的 KA7805E 的参考设计
SC1565 具有使能功能的超低压差 1.5 安培稳压器的典型应用
LT1170CQ、5A 外部电流限制的典型应用
【深大电赛】简易电压表
OPENMV_LED+BAT
高频放大器评估板
AM2F-2412SH52Z 12V 2W DC/DC 转换器的典型应用
SG2526B 用于推挽配置的稳压脉宽调制器的典型应用
LT1121AIS8-3.3 5V 低压差稳压器的典型应用电路,用于具有关断的电池供电电源
CN0119
随便看看
求算法竞赛(罗勇军)上册
论坛里有算法竞赛(下册,罗勇军),但无上册,求大神上传算法竞赛(罗勇军)上册,谢谢!
【Raspberry Pi 5测评】树莓派5学习笔记05(语音识别垃圾分类)
deepseek到底行不行啊?
AT89C2051控制LMX2332的频率合成器
学习笔记之TMS320C6748的GPIO操作
xc866实验实例
BLE课程(一):蓝牙低功耗技术及其特点
串口通信只能输出3个字符
查找数据手册?
搜索
EEWorld Datasheet 技术支持
热门标签
源代码
单片机
放大器
TI
ST
电源
分立器件
传感器
测试测量
模拟
先导式电磁阀
ASR控制系统
电池充电器
反向电流
NAND闪存
电场力
集线器
LibreCMC
usb2.0
6G
相关文章
更多>>
德州仪器2025资本管理大会,揭露半导体巨头的战略走向
日前,德州仪器召开了2025资本管理(Capital Management)大会,TI首席执行官Haviv Ilan指出,如今半导体行业深受周期波动和地缘政治影响,供应链正面临重塑。TI目前正处于六
人形机器人厂商Figure终止与OpenAI合作 因自研技术取得重大突破
2月5日消息,据外媒报道,在OpenAI训练的人工智能聊天机器人ChatGPT大火后,有多家厂商将他们的大模型及相关的技术整合进了产品和服务中,微软在2023年2月份就发布了由AI驱动的全新必应搜索
松下考虑出售电视业务,股价因重组计划迎 11 年来最大涨幅
2 月 5 日消息,松下控股公司正寻求降低固定成本,并向人工智能等更具盈利潜力的领域转型。这家日本公司正考虑通过人员架构调整和缩减表现不佳的业务来削减成本。 据日经新闻报道,松下控股总裁 Yuki
丰田发力电动汽车:上海新厂 2027 年投产,美国电池项目 4 月供货
AMD与谷歌披露Zen 1至Zen 4 EPYC CPU关键微码漏洞
DigiKey将2024年定义为公司的投资之年
英飞凌PSOC家族首款专为电机和电源应用的MCU正式亮相
德州仪器 2024年Q4财报解析:中国市场增长亮眼,目前没有收到反垄断调查通知
欧盟提议成立高级研究机构:专注于AI等战略技术以加强竞争力
传台积电报废三万片晶圆,三万片受损
新帖速递
STM32和无源蜂鸣器播放声音的问题
车规级AECQ200介绍,混合铝电解电容器的选择
嵌入式教程_DSP技术_DSP实验箱操作教程:2-28 搭建轻量级WEB服务器实验
OPA847IDBVR运放器国产替代
AG32VF407测试UART
【得捷电子Follow Me第二期】第一章 收到货物的分享
请问这个红外接收头是什么型号?能用哪个型号代替?谢谢
出售全新未拆封ZYNQ 7Z020 FPGA核心板
用在锂电池供电的水表设置上的LORA模块,当有100块水表集中安装在一个楼道内时,节能
请问一下,当某个端口被设置为 RX0后,这个端口的输入输出方向还有必要设置吗
今年怎么这么难,比疫情时还难,三十了面临失业好迷茫
请教稳压管测试问题
【小华HC32F448测评】关于小华半导体的UART中断发送和PRINTF构造和重定向
【BIGTREETECH PI开发板】 HDMI输出测试
【BIGTREETECH PI开发板】+08.音频测试(zmj)
有奖直播:ADI 超低功耗 MCU MAX326xx 系列介绍
直播时间:3月20日(周四) 上午10:00
活动奖励:双肩包、充电宝、小夜灯
查看 »
【回帖赢京东卡】无线技术盛宴第二趴
【活动时间】即日起—2025年2月28日
【活动好礼】30元京东卡
查看 »
DigiKey 应用探索站 | 无线技术盛宴第二趴
当月好物、热门无线技术资源、特色活动、DigiKey在线实用工具,干货多多~
查看 »
开发板申请:拥有 AI 加持的 STM32N6570-DK 免费试用 !
申请时间:即日起-3月2日
查看 »
安世半导体智能工业应用探索站,闯关赢好礼!
点击页面内“开始探索”按钮,填写并提交表单;
请根据序号依次完成3个安世半导体智能工业应用的探索,并根据给出的资料完成共计9题(每个应用3题),答对5题以上的玩家即可获得抽奖资格;
每人仅有一次参与答题的机会,请慎重作答,活动结束后,我们将抽取30位玩家赠送礼品。
查看 »
Microchip 直播|多相降压电源控制技术的发展与探讨 报名中!
直播主题:多相降压电源控制技术的发展与探讨
直播时间:2025年2月25日(星期二)上午10:30-11:30
快来报名!
查看 »
答题赢好礼,PI电源小课堂第3期来啦!
本期内容:集成式半桥驱动IC BridgeSwitch 2, 助力高效永磁同步电机逆变器的设计
活动时间:即日起-2月28日
看视频答题即可赢取京东卡!
查看 »
本周精选下载推荐:电源管理基础Dummies
本周小编给大家带来一本超简单、超干货的电子书——《电源管理基础Dummies》!内容深入浅出,排版舒服简洁,分分钟能get到电源管理最核心的知识内容。
查看 »
关闭
站长推荐
1
/8
电子工程世界版权所有
京B2-20211791
京ICP备10001474号-1
电信业务审批[2006]字第258号函
京公网安备 11010802033920号
Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复
返回顶部
返回列表
论坛首页
版块列表
专业技术中心
TI技术论坛
ST传感器与低功耗无线技术论坛
ADI参考电路
DigiKey得捷技术专区
ADI · 世健工业技术
电子技术交流
边缘AI
嵌入式系统
单片机
国产芯片交流
电机控制
FPGA/CPLD
模拟电子
电源技术
无线连接
传感器
PCB设计
综合技术交流
下载中心专版
大学堂专版
测评中心专版
行业应用
汽车电子
机器人开发
工业自动化与控制
能源基础设施
医疗电子
消费电子
创意与实践
电子竞赛
DIY/开源硬件专区
淘e淘
创意市集
休息一下
聊聊、笑笑、闹闹
工作这点儿事
为我们提意见&公告
EEWorld颁奖专区
信息发布
最新帖子
最新帖子
最新回复
精华
消灭零回复
测评中心
活动中心
积分兑换
E金币兑换
芯积分
厂商专区
TI技术论坛
ST传感器与低功耗无线技术论坛