gd32F450单片机 ADC+DMA

2023-12-06 08:40
文章标签 单片机 adc gd32f450 dma

本文主要是介绍gd32F450单片机 ADC+DMA,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

接触国产单片机不久,好多配置的东西记不住,写下来分享然后也方便自己以后拿来看看。欢迎大家把踩坑的部分分享一下。

本次是ADC配置和DMA采集的配置部分。某些参数错误会导致内存溢出,影响到其他变量或者参数表的值。

引脚为PB0和PB1两个。

一、相关时钟初始化

首先是时钟配置,根据手册可以查到两个引脚对应ADC0或者ADC1(此处属于猜测,但是配置为ADC0功能正常)

使能DMA1的时钟,并且给对应的时钟分频(8分频是由时钟树查询得知可以进行8分频来选择,也可以自行根据时钟树来选择)


    rcu_periph_clock_enable(RCU_GPIOB);rcu_periph_clock_enable(RCU_ADC0);rcu_periph_clock_enable(RCU_DMA1);adc_clock_config(ADC_ADCCK_PCLK2_DIV8);

二、GPIO初始化


    gpio_mode_set(GPIOB, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO_PIN_0);gpio_mode_set(GPIOB, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO_PIN_1);

这个部分就不多讲了,主要是配置成模拟输入的模式。

三、ADC初始化

基本的常规配置和例程相差不大,大概了解了一下

注意adc_channel_length_config函数的 长度 的配置


    /* ADC mode config */adc_sync_mode_config(ADC_SYNC_MODE_INDEPENDENT);//独立模式/* ADC contineous function disable */adc_special_function_config(ADC0, ADC_CONTINUOUS_MODE, ENABLE);//连续转换/* ADC scan mode disable */adc_special_function_config(ADC0, ADC_SCAN_MODE, ENABLE);//扫描模式/* ADC data alignment config */adc_data_alignment_config(ADC0, ADC_DATAALIGN_RIGHT);//大端模式和小端模式的选择/* ADC channel length config */adc_channel_length_config(ADC0, ADC_REGULAR_CHANNEL, 2);/* ADC regular channel config */adc_regular_channel_config(ADC0, 0, ADC_CHANNEL_8, ADC_SAMPLETIME_15);//手册截图中的IN8adc_regular_channel_config(ADC0, 1, ADC_CHANNEL_9, ADC_SAMPLETIME_15);//IN9/* ADC trigger config *由于我没有使用外部触发所以使用默认的不使用的配置方法/adc_external_trigger_source_config(ADC0, ADC_REGULAR_CHANNEL, ADC_EXTTRIG_REGULAR_T0_CH0); adc_external_trigger_config(ADC0, ADC_REGULAR_CHANNEL, EXTERNAL_TRIGGER_DISABLE);/* ADC DMA function enable */adc_dma_request_after_last_enable(ADC0);adc_dma_mode_enable(ADC0);/* enable ADC interface */adc_enable(ADC0);/* wait for ADC stability */delay_1ms(1);/* ADC calibration and reset calibration */adc_calibration_enable(ADC0);/* enable ADC software trigger */adc_software_trigger_enable(ADC0, ADC_REGULAR_CHANNEL);

四、DMA配置

注意:dma_single_data_parameter.number的值要对应我的adc_value数组的成员数相同,否则会造成内存溢出,影响内存中其他数据的值。


    /* ADC_DMA_channel configuration */dma_single_data_parameter_struct dma_single_data_parameter;/* ADC DMA_channel configuration */dma_deinit(DMA1, DMA_CH0);/* initialize DMA single data mode */dma_single_data_parameter.periph_addr = (uint32_t)(&ADC_RDATA(ADC0));//绑定了ADC0模块dma_single_data_parameter.periph_inc = DMA_PERIPH_INCREASE_DISABLE;dma_single_data_parameter.memory0_addr = (uint32_t)(adc_value);//由于我要进行两个脚的adc转换 所以uint16_t adc_value[2];这样来进行的定义dma_single_data_parameter.memory_inc = DMA_MEMORY_INCREASE_ENABLE;dma_single_data_parameter.periph_memory_width = DMA_PERIPH_WIDTH_16BIT;dma_single_data_parameter.direction = DMA_PERIPH_TO_MEMORY;dma_single_data_parameter.number = 2;//注意内存溢出时 确认此处是否正确dma_single_data_parameter.priority = DMA_PRIORITY_HIGH;dma_single_data_mode_init(DMA1, DMA_CH0, &dma_single_data_parameter);dma_channel_subperipheral_select(DMA1, DMA_CH0, DMA_SUBPERI0);/* enable DMA circulation mode */dma_circulation_enable(DMA1, DMA_CH0);/* enable DMA channel */dma_channel_enable(DMA1, DMA_CH0);

五、ADC数值计算

adc_value[1]*电压V/4096

电压V的值,单位是v,问硬件设计

六、结束语

如果由其他的疑问,可以评论留言。我调试中主要遇到的问题就是内存溢出的问题,如果有其他问题大家可以一起讨论一下。

这篇关于gd32F450单片机 ADC+DMA的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/461189

相关文章

基于51单片机的自动转向修复系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机

STM32(十一):ADC数模转换器实验

AD单通道: 1.RCC开启GPIO和ADC时钟。配置ADCCLK分频器。 2.配置GPIO,把GPIO配置成模拟输入的模式。 3.配置多路开关,把左面通道接入到右面规则组列表里。 4.配置ADC转换器, 包括AD转换器和AD数据寄存器。单次转换,连续转换;扫描、非扫描;有几个通道,触发源是什么,数据对齐是左对齐还是右对齐。 5.ADC_CMD 开启ADC。 void RCC_AD

单片机毕业设计基于单片机的智能门禁系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍程序代码部分参考 设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订

STM32 ADC+DMA导致写FLASH失败

最近用STM32G070系列的ADC+DMA采样时,遇到了一些小坑记录一下; 一、ADC+DMA采样时进入死循环; 解决方法:ADC-dma死循环问题_stm32 adc dma死机-CSDN博客 将ADC的DMA中断调整为最高,且增大ADCHAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_buffer, ADC_Buffer_Size); 的ADC_Bu

基于stm32的河流检测系统-单片机毕业设计

文章目录 前言资料获取设计介绍功能介绍具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机设计精品

VB和51单片机串口通信讲解(只针对VB部分)

标记:该篇文章全部搬自如下网址:http://www.crystalradio.cn/thread-321839-1-1.html,谢谢啦            里面关于中文接收的部分,大家可以好好学习下,题主也在研究中................... Commport;设置或返回串口号。 SettingS:以字符串的形式设置或返回串口通信参数。 Portopen:设置或返回串口

MCU5.51单片机的最小系统

1.最小系统的组成部分 晶振电路(时钟),复位电路,电源电路(控制电压,保持稳定),下载电路(外加的,用于烧录程序) 烧录: 通过下载电路,把程序下载到单片机中用于运行 2.晶振电路 电路图: 是晶振 是电容 为了防止晶振起振时产生影响,因此加电容 3.复位电路 电路图: 按按钮RSTK1(保持一段时间的高电平)即可实现STC芯片的复位 4.电源电路 电路图:

单片机XTAL引脚引出的晶振分析

51单片机的18,19脚XTAL1,XTAL2用来提供外部振荡源给片内的时钟电路。 XTAL1和XTAL2引脚,该单片机可以使用外部时钟也可以使用内部时钟。 当使用内部时钟时,此二引线端用于外接石英晶体和微调电容; 当使用外部时钟时,用于接外部时钟信号,NMOS接XTAL2,CMOS接XTAL1。 原理: XTAL1和XTAL2分别是一个反相器的输入和输出。NMOS的反相器是

学习硬件测试05:NTC(ADC)+正弦波(DAC)+DMA(ADC+DAC)(P73、P76、P78)

文章以下内容全部为硬件相关知识,鲜有软件知识,并且记的是自己需要的部分,大家可能看不明白。 一、NTC(ADC) 1.1实验现象 本实验用 NTC 采集温度,数码管实时显示温度数据(整数),左下角 USB 小串口每隔 1S 打印温度信息。 1.2硬件电路 NTC 电阻是一个模拟温度传感器,随着温度的升高,电阻值逐渐减小。电路简单介绍如下: 电源滤波电容在 25℃ 室温下 NTC 电

物联网——DMA+AD多通道

DMA简介 存储器映像 某些数据在运行时不会发生变化,则设置为常量,存在Flash存储器中,节省运行内存的空间 DMA结构图 DMA访问权限高于cpu 结构要素 软件触发源:存储器到存储器传输完成后,计数器清零 硬件触发源:ADC、定时器、串口 重写计数器时,需关闭DMA DMA请求 数据宽度与对齐 目标宽度小于传输带宽:高位补零,反之,舍弃高位 数据转运与D