GD32 ADC驱动-多通道DMA软件触发

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


0 参考文档

GD32F30x_User_Manual_CN_v2.2 章节12.4

1 基础知识点

a. 规则通道、注入通道

规则组:regular, 16个通道共用一个存储寄存器,ADC采集的结果都放入该寄存器中。例如,当通道1的采集后数据未被取出,通道2采集后将覆盖该数据。

注入组:inserted, 4个通道都有独立的存储寄存器,数据不会被覆盖

b. 触发方式

外部触发、内部定时器触发、软件触发
![在这里插入图片描述](https://img-blog.csdnimg.cn/a653ad6071604069bf5f3ed2156861f9.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAbGdwMzMz,size_11,color_FFFFFF,t_70,g_se,x_16#pic_center
图1

c. 单次转换模式、扫描模式

单次转换模式:只转换一个通道(配置的rank 0)

扫描模式 : SCAN, 转换一个通道组,包含多个通道

d. 连续模式、间断模式

连续模式:Continuous, 只需一次外部触发,可以在转换完成后,自动进行下一次转换

间断模式: 每次采集都需要外部触发。

两者独立配置可以组成四种组合:单次间断、单次连续、扫描间断、扫描连续

e. 序列长度、序列等级

序列长度:length, 见【图2】23:20 RL[3:0]的定义。扫描模式时,会转换多个通道,具体几个则是由配置的序列长度决定的,即多 = length

序列等级:rank ,见【图3】RSQ0[4:0] .换多个通道时,会按照rank映射的顺序进行转换,而非实际的channel顺序。

在这里插入图片描述

                                                        图2 

在这里插入图片描述

                                                      图3

f . 实际例子

i. 配置规则通道,单次间断,(单通道间断)length = 1, (rank = 0,channel = 2)

在这里插入图片描述

                                                                                            图4
ii.配置规则通道,单次连续,(单通道连续),length = 1, (rank = 0,channel = 2)

在这里插入图片描述

                                                                           图5
iii. 配置规则通道,扫描间断,length = 8

(rank = 0,channel = 2)

(rank = 1, channel = 1 )

(rank = 2, channel = 5 ),

(rank = 3, channel = 7 ),

(rank = 4, channel = 11 ),

(rank = 5, channel = 16 ),

(rank = 6, channel = 12 ),

(rank = 7, channel = 17 ),

最后的结果是如下图6
在这里插入图片描述

                                                     图6
iii. 配置规则通道,扫描连续,length = 5。rank=0,1,2,3,4, chanel = 2,1,5,7,11

在这里插入图片描述

                                                   图7

2 多通道转换代码配置

a. 连续转换 与 扫描模式配置

adc_special_function_config(adc_x, ADC_CONTINUOUS_MODE, ENABLE);
adc_special_function_config(adc_x, ADC_SCAN_MODE, ENABLE);  

需要强调,连续转换失能 = 间断模式 , 扫描模式使能 = 单次转换。两者独立配置可以组成四种组合:单次间断、

单次连续、扫描间断、扫描连续

b. 触发配置

/* ADC trigger config */
adc_external_trigger_source_config(adc_x, ADC_REGULAR_CHANNEL, ADC0_1_2_EXTTRIG_REGULAR_NONE);

触发配置为外部触发无,即是软件触发

c. 序列长度和等级配置

/* ADC channel length config */
adc_channel_length_config(adc_x, ADC_REGULAR_CHANNEL, rank_length);


/* ADC regular channel config */
for(rank=0;rank<rank_length;rank++){
    adc_regular_channel_config(adc_x, rank, adc_channel, ADC_SAMPLETIME_239POINT5);
    adc_external_trigger_config(adc_x, ADC_REGULAR_CHANNEL, ENABLE);
}

d. 触发启动

本项目使用软件触发,可根据实际情况选择调用位置。

/* ADC software trigger enable */
adc_software_trigger_enable(adc_x, ADC_REGULAR_CHANNEL);

e. DMA配置

除了常规配置,如果是规则组多通道转换,需要使能Memory increase, 同时数组的个数要大于转换的通道数,否则有可能内存溢出

dma_data_parameter.memory_inc = DMA_MEMORY_INCREASE_ENABLE;
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值