中国网站备案查询系统,网站推广 经典案例,高端网站建设 杭州,免费建设自己的网站目录
背景
摇杆的原理
程序
端口配置
ADC 配置
DMA配置 背景
DMA是一种计算机技术#xff0c;允许某些硬件子系统直接访问系统内存#xff0c;而不需要中央处理器#xff08;CPU#xff09;的介入#xff0c;从而减轻CPU的负担。我们可以通过DMA来从外设#xf…目录
背景
摇杆的原理
程序
端口配置
ADC 配置
DMA配置 背景
DMA是一种计算机技术允许某些硬件子系统直接访问系统内存而不需要中央处理器CPU的介入从而减轻CPU的负担。我们可以通过DMA来从外设ADC、UART等读取数据之后搬运到指定的内存。
ADC是根据用户动作或者环境变化会造成传感器等设备的电压值发生变化再通过STM32的ADC块实现采样、保持、量化、编码将模拟量转换成数据量。
本篇文章会介绍目前无人机常用的摇杆操作左右、上下、按下等变为电压值变化以及STM32 如何实现DMA定期读取遥感ADC值。 摇杆的原理 JS_X作为X轴方向的模拟信号输入口
JS_Y:作为Y轴方向的模拟信号输入口
JS_D挥动开关的状态的检测端口
通过原理图可以通过X轴方向滑动可以改变接触点在电阻的位置从而影响读取到的电压值。Y轴方向亦是同理。因此只需将JS_X和JS_Y的端口设置位模拟量输入端然后由STM32单片机的ADC块处理。
而按下的操作显然是普通的Port Key, 因此只用将JS_D设置位上拉输入然后通过读取该端口的状态来判断是否摇杆被按下。 STM32的DMA通道STM32系列最多有12个独立可配置的通道包括DMA17个通道和DMA25个通道。每个通道可以分别设置源地址与目的地址实现独立工作 程序
端口配置 #define ADC1_DR_Address ((uint32_t)0x4001244C) //ADC1这个外设的地址查参考手册得出#define ADCPORT GPIOA //定义ADC接口
#define ADC_CH4 GPIO_Pin_4 //定义ADC接口 电压电位器
#define ADC_CH5 GPIO_Pin_5 //定义ADC接口 光敏电阻
#define ADC_CH6 GPIO_Pin_6 //定义ADC接口 摇杆X轴
#define ADC_CH7 GPIO_Pin_7 //定义ADC接口 摇杆Y轴#define JoyStickPORT GPIOB //定义IO接口组
#define JoyStick_KEY GPIO_Pin_2 //定义IO接口void ADC_GPIO_Init(void){ //GPIO初始化设置GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC,ENABLE); RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);//使能DMA时钟用于ADC的数据传送RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);//使能ADC1时钟GPIO_InitStructure.GPIO_Pin ADC_CH6 | ADC_CH7; //!!!选择端口 GPIO_InitStructure.GPIO_Mode GPIO_Mode_AIN; //选择IO接口工作方式 GPIO_Init(ADCPORT, GPIO_InitStructure);
}void JoyStick_Init(void){ //摇杆的挥动开关的接口初始化GPIO_InitTypeDef GPIO_InitStructure; //定义GPIO的初始化枚举结构 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC,ENABLE); GPIO_InitStructure.GPIO_Pin JoyStick_KEY; //选择端口号0~15或all GPIO_InitStructure.GPIO_Mode GPIO_Mode_IPU; //选择IO接口工作方式 //上拉电阻 GPIO_Init(JoyStickPORT,GPIO_InitStructure);
}
1GPIOA组、GPIOB组、DMA1的外设时钟使能起来(GPIOC组功能用于其他我们可以忽略它)
2) X轴和Y轴的输入端要设置为模拟量输入端口
3Port Key 要设置位上拉电阻输入口因为在没有被按下时要能读入高电平
3初始化端口 ADC 配置
void ADC_Configuration(void){ //初始化设置ADC_InitTypeDef ADC_InitStructure;//定义ADC初始化结构体变量ADC_GPIO_Init();//GPIO初始化设置ADC_DMA_Init();//DMA初始化设置ADC_InitStructure.ADC_Mode ADC_Mode_Independent;//ADC1和ADC2工作在独立模式ADC_InitStructure.ADC_ScanConvMode ENABLE; //使能扫描ADC_InitStructure.ADC_ContinuousConvMode ENABLE;//ADC转换工作在连续模式ADC_InitStructure.ADC_ExternalTrigConv ADC_ExternalTrigConv_None;//有软件控制转换ADC_InitStructure.ADC_DataAlign ADC_DataAlign_Right;//转换数据右对齐ADC_InitStructure.ADC_NbrOfChannel 2;//!!!顺序进行规则转换的ADC输入口的数目根据ADC采集通道数量修改ADC_Init(ADC1, ADC_InitStructure); //根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器//设置指定ADC的规则组通道设置它们的转化顺序和采样时间//ADC1,ADC通道x,规则采样顺序值为y,采样时间为28周期 ADC_RegularChannelConfig(ADC1, ADC_Channel_6, 1, ADC_SampleTime_28Cycles5);//!!! ADC1选择信道x,采样顺序y,采样时间n个周期ADC_RegularChannelConfig(ADC1, ADC_Channel_7, 2, ADC_SampleTime_28Cycles5);//!!! ADC1选择信道x,采样顺序y,采样时间n个周期ADC_DMACmd(ADC1, ENABLE);// 开启ADC的DMA支持要实现DMA功能还需独立配置DMA通道等参数ADC_Cmd(ADC1, ENABLE);//使能ADC1ADC_ResetCalibration(ADC1); //重置ADC1校准寄存器while(ADC_GetResetCalibrationStatus(ADC1));//等待ADC1校准重置完成ADC_StartCalibration(ADC1);//开始ADC1校准while(ADC_GetCalibrationStatus(ADC1));//等待ADC1校准完成ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能ADC1软件开始转换
} ● 12 位分辨率 ● 转换结束、注入转换结束和发生模拟看门狗事件时产生中断 ● 单次和连续转换模式 ● 从通道 0 到通道 n 的自动扫描模式 ● 自校准 ● 带内嵌数据一致性的数据对齐 ● 采样间隔可以按通道分别编程 ● 规则转换和注入转换均有外部触发选项 ● 间断模式 ● 双重模式 ( 带 2 个或以上 ADC 的器件 ) ● ADC 转换时间 ─ STM32F103xx 增强型产品时钟为 56MHz 时为 1 μ s( 时钟为 72MHz 为 1.17 μ s) ─ STM32F101xx 基本型产品时钟为 28MHz 时为 1 μ s( 时钟为 36MHz 为 1.55 μ s) ─ STM32F102xxUSB 型产品时钟为 48MHz 时为 1.2 μ s ─ STM32F105xx 和 STM32F107xx 产品时钟为 56MHz 时为 1 μ s( 时钟为 72MHz 为 1.17 μ s) ● ADC 供电要求 2.4V 到 3.6V ● ADC 输入范围 V REF- ≤ V IN ≤ V REF ● 规则通道转换期间有 DMA 请求产生。 STM32F103C8T6由两个ADC。 ADC框图 ADC1和ADC2独立工作故配置位独立模式 因为要ADC1扫描有配置的两个通道因此要使能扫描 因为要连续多次采样因此要设置位连续模式而非单次模式 DMA的触发可以通过软件触发内部触发和硬件触发外部触发硬件触发见截图。 我们采用内部软件触发 常见的ADC数据对齐方式
右对齐默认情况这是大多数STM32 ADC寄存器的默认行为。例如如果你使用12位分辨率的ADC那么只有最低的12位将被用来存储转换结果而最高的4位在16位寄存器中将会是0。
左对齐在某些情况下你可能需要将数据左对齐这意味着将最高有效位MSB放在寄存器的最高位。这通常通过特定的硬件配置或软件操作来实现比如在某些STM32系列中可以通过配置ADC寄存器来实现数据的左对齐。 输入通道数配置X轴通道和Y轴通道总共两个。 注册规则组 注册包含通道信息、采样顺序、采样时间。ADC通道通过查阅端口定义可知。
STM32F103C8T6 C8:48pin 64K Flash 属于中容量 SRAM 20K.
查看引脚定义可以知道PA6的ADC通道是6PA7的通道是7. 使能ADC1的DMA请求 使能ADC1 ADC1自校准 软件触发开始ADC1转换 DMA配置 vu16 ADC_DMA_IN[2]; //ADC数值存放的变量void ADC_DMA_Init(void){ //DMA初始化设置DMA_InitTypeDef DMA_InitStructure;//定义DMA初始化结构体DMA_DeInit(DMA1_Channel1);//复位DMA通道1DMA_InitStructure.DMA_PeripheralBaseAddr ADC1_DR_Address; //定义 DMA通道外设基地址ADC1_DR_AddressDMA_InitStructure.DMA_MemoryBaseAddr (u32)ADC_DMA_IN; //!!!定义DMA通道ADC数据存储器其他函数可直接读此变量即是ADC值DMA_InitStructure.DMA_DIR DMA_DIR_PeripheralSRC;//指定外设为源地址DMA_InitStructure.DMA_BufferSize 2;//!!!定义DMA缓冲区大小根据ADC采集通道数量修改DMA_InitStructure.DMA_PeripheralInc DMA_PeripheralInc_Disable;//当前外设寄存器地址不变DMA_InitStructure.DMA_MemoryInc DMA_MemoryInc_Enable;//!!! 当前存储器地址Disable不变Enable递增用于多通道采集DMA_InitStructure.DMA_PeripheralDataSize DMA_PeripheralDataSize_HalfWord;//定义外设数据宽度16位DMA_InitStructure.DMA_MemoryDataSize DMA_MemoryDataSize_HalfWord; //定义存储器数据宽度16位DMA_InitStructure.DMA_Mode DMA_Mode_Circular;//DMA通道操作模式位环形缓冲模式DMA_InitStructure.DMA_Priority DMA_Priority_High;//DMA通道优先级高DMA_InitStructure.DMA_M2M DMA_M2M_Disable;//禁止DMA通道存储器到存储器传输DMA_Init(DMA1_Channel1, DMA_InitStructure);//初始化DMA通道1DMA_Cmd(DMA1_Channel1, ENABLE); //使能DMA通道1
} 由于是从ADC1外设(ADC1的数据寄存器DR)到内存因此方向配置如下 DMA设置为循环模式可以连续多次的从ADC1外设搬运数据到指定内存。 因为ADC1外设DR是16位ADC分辨率是12位所以 DMA1的每个channel用于设置数据源外设和目的地内存地址。因为我们的外设是ADC1。所以我们选择Channel1. ADC1的外设的地址 DMA优先级设置为HIGH 优先级相同情况下由内部硬件优先级决定 由于不是内存搬运到内存故DMA_M2M要设置为Disable 文章转载自: http://www.morning.cwznh.cn.gov.cn.cwznh.cn http://www.morning.rdlrm.cn.gov.cn.rdlrm.cn http://www.morning.wqpsf.cn.gov.cn.wqpsf.cn http://www.morning.zlhbg.cn.gov.cn.zlhbg.cn http://www.morning.krbjb.cn.gov.cn.krbjb.cn http://www.morning.thrtt.cn.gov.cn.thrtt.cn http://www.morning.ktlfb.cn.gov.cn.ktlfb.cn http://www.morning.bmqls.cn.gov.cn.bmqls.cn http://www.morning.rrgm.cn.gov.cn.rrgm.cn http://www.morning.zxznh.cn.gov.cn.zxznh.cn http://www.morning.yjprj.cn.gov.cn.yjprj.cn http://www.morning.kgmkl.cn.gov.cn.kgmkl.cn http://www.morning.zrlwl.cn.gov.cn.zrlwl.cn http://www.morning.zlff.cn.gov.cn.zlff.cn http://www.morning.ltspm.cn.gov.cn.ltspm.cn http://www.morning.kzbpx.cn.gov.cn.kzbpx.cn http://www.morning.kcfnp.cn.gov.cn.kcfnp.cn http://www.morning.dbjyb.cn.gov.cn.dbjyb.cn http://www.morning.qfdyt.cn.gov.cn.qfdyt.cn http://www.morning.zwndt.cn.gov.cn.zwndt.cn http://www.morning.xbzfz.cn.gov.cn.xbzfz.cn http://www.morning.wkknm.cn.gov.cn.wkknm.cn http://www.morning.nhlyl.cn.gov.cn.nhlyl.cn http://www.morning.nj-ruike.cn.gov.cn.nj-ruike.cn http://www.morning.xdttq.cn.gov.cn.xdttq.cn http://www.morning.wddmr.cn.gov.cn.wddmr.cn http://www.morning.zlff.cn.gov.cn.zlff.cn http://www.morning.nsjpz.cn.gov.cn.nsjpz.cn http://www.morning.qyqmj.cn.gov.cn.qyqmj.cn http://www.morning.hwbmn.cn.gov.cn.hwbmn.cn http://www.morning.ttfh.cn.gov.cn.ttfh.cn http://www.morning.ztcxx.com.gov.cn.ztcxx.com http://www.morning.xgbq.cn.gov.cn.xgbq.cn http://www.morning.ggtkk.cn.gov.cn.ggtkk.cn http://www.morning.dmtbs.cn.gov.cn.dmtbs.cn http://www.morning.kongpie.com.gov.cn.kongpie.com http://www.morning.kghss.cn.gov.cn.kghss.cn http://www.morning.twgzq.cn.gov.cn.twgzq.cn http://www.morning.kwqwp.cn.gov.cn.kwqwp.cn http://www.morning.rhsr.cn.gov.cn.rhsr.cn http://www.morning.bwttj.cn.gov.cn.bwttj.cn http://www.morning.wgxtz.cn.gov.cn.wgxtz.cn http://www.morning.mjdbd.cn.gov.cn.mjdbd.cn http://www.morning.jxjrm.cn.gov.cn.jxjrm.cn http://www.morning.qnywy.cn.gov.cn.qnywy.cn http://www.morning.cmzcp.cn.gov.cn.cmzcp.cn http://www.morning.nhzxd.cn.gov.cn.nhzxd.cn http://www.morning.mlnbd.cn.gov.cn.mlnbd.cn http://www.morning.nrbqf.cn.gov.cn.nrbqf.cn http://www.morning.ltfnl.cn.gov.cn.ltfnl.cn http://www.morning.drcnf.cn.gov.cn.drcnf.cn http://www.morning.yfmxn.cn.gov.cn.yfmxn.cn http://www.morning.plznfnh.cn.gov.cn.plznfnh.cn http://www.morning.tfrlj.cn.gov.cn.tfrlj.cn http://www.morning.qjxxc.cn.gov.cn.qjxxc.cn http://www.morning.mytmn.cn.gov.cn.mytmn.cn http://www.morning.wpmlp.cn.gov.cn.wpmlp.cn http://www.morning.yhdqq.cn.gov.cn.yhdqq.cn http://www.morning.qstkk.cn.gov.cn.qstkk.cn http://www.morning.ebpz.cn.gov.cn.ebpz.cn http://www.morning.xmyrn.cn.gov.cn.xmyrn.cn http://www.morning.qhnmj.cn.gov.cn.qhnmj.cn http://www.morning.pwbps.cn.gov.cn.pwbps.cn http://www.morning.nbhft.cn.gov.cn.nbhft.cn http://www.morning.mdnnz.cn.gov.cn.mdnnz.cn http://www.morning.lnbcx.cn.gov.cn.lnbcx.cn http://www.morning.dnmwl.cn.gov.cn.dnmwl.cn http://www.morning.ttdxn.cn.gov.cn.ttdxn.cn http://www.morning.krhkb.cn.gov.cn.krhkb.cn http://www.morning.cpctr.cn.gov.cn.cpctr.cn http://www.morning.wjlbb.cn.gov.cn.wjlbb.cn http://www.morning.qbdsx.cn.gov.cn.qbdsx.cn http://www.morning.kyjyt.cn.gov.cn.kyjyt.cn http://www.morning.gfhng.cn.gov.cn.gfhng.cn http://www.morning.hnkkf.cn.gov.cn.hnkkf.cn http://www.morning.tbjb.cn.gov.cn.tbjb.cn http://www.morning.cybch.cn.gov.cn.cybch.cn http://www.morning.yfcbf.cn.gov.cn.yfcbf.cn http://www.morning.lcqrf.cn.gov.cn.lcqrf.cn http://www.morning.mxmzl.cn.gov.cn.mxmzl.cn