(一)STM32中的搬运工-----DMA
特点:不需要CPU的干预
作用:实现存储器和外设之间或者存储器和存储器之间的高速数据传输
1》DMA搬运数据的宽度 字节——8bit 半字——16bit 全字——32bit
2》利用DMA实现存储器到存储器的数据传输
1,打开时钟----DMA1
2,初始化DMA
----外设基地址
----存储器基地址
----传输方向
----传输数目
----外设地址是否递增
----存储器地址是否递增
----外设传输的数据宽度
----存储器传输的数据宽度
----模式---正常或循环
----优先等级
----存储器到存储器是否使能
3,使能DMA
4,判断是否传输完成
5,清除标志位,检验是否传输成功
-----------------------------------------------
(二)模拟数字转换器-----ADC
1>模拟量是随着时间的变化,电压值是连续变化的,数字量是离散的。
2>ADC就是用来读电压值
3>规则转换:ADC按照事先设定好的依次进行转换
注入转换:类似于中断,当注入转换发起时,先进行注入转换,注入转换完成后在进行规则转换
4>参考STM3210x中文参考手册
1>检测AD按键的键值和光敏电阻,编程步骤:
1,打开时钟----ADC1,DMA1,GPIOC,AFIO
2,ADC预分频器---6分频
3,初始化GPIOC
----GPIO_Pin_0|GPIO_Pin_1
----模拟输入
4,初始化ADC1
----ADC独立模式
----连续转换
----使用扫描模式
----不使用外部触发
----右对齐方式
----2个通道
5,初始化DMA1
----外设基地址------&ADC1->DR
----存储器基地址----ADC_DATA[][]---数组
----传输方向--------外设作为数据来源
----传输数目--------100
----外设地址是否递增--否
----存储器地址是否递增--是
----外设传输的数据宽度--半字——16bit
----存储器传输的数据宽度-半字——16bit
----模式---正常或循环---循环
----优先等级---高级
----存储器到存储器是否使能---否
6,使能ADC的DMA
7,使能DMA1的通道1-----通过DMA的通道一览表去查看
8,配置通道10和通道11的转换顺序和采样时间
9,使能ADC1
10,重置校准寄存器
11,等待重置校准寄存器成功-----reset 代表成功
12,开始校准
13,等待校准成功-----reset 代表成功
14,启动---软件触发ADC1
uint16_t ADC_RG_VALUE(void)
{
uint32_t SUM=0;
uint8_t i;
for(i=0;i<DATA_size;i++){
SUM=SUM+ADC_DATA[i][0];
}
return (uint16_t)(SUM/DATA_size);
}
uint16_t ADC_KEY_VALUE(void)
{
uint32_t SUM=0;
uint8_t i;
for(i=0;i<DATA_size;i++){
SUM=SUM+ADC_DATA[i][1];
}
return (uint16_t)(SUM/DATA_size);
}