STM32 怎样利用DMA和获取ADC [复制链接]
发表于 2025-10-30 23:26:02 | 显示全部楼层 |阅读模式
目次
配景
‌摇杆的原理
步调
端口设置
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个独立可设置的通道,包罗DMA1(7个通道)和DMA2(5个通道)。每个通道可以分别设置源所在与目的所在,实现独立工作‌

步调

端口设置

  1. #define ADC1_DR_Address    ((uint32_t)0x4001244C) //ADC1这个外设的地址(查参考手册得出)
  2. #define ADCPORT                GPIOA        //定义ADC接口
  3. #define ADC_CH4                GPIO_Pin_4        //定义ADC接口 电压电位器
  4. #define ADC_CH5                GPIO_Pin_5        //定义ADC接口 光敏电阻
  5. #define ADC_CH6                GPIO_Pin_6        //定义ADC接口 摇杆X轴
  6. #define ADC_CH7                GPIO_Pin_7        //定义ADC接口 摇杆Y轴
  7. #define JoyStickPORT        GPIOB        //定义IO接口组
  8. #define JoyStick_KEY        GPIO_Pin_2        //定义IO接口
  9. void ADC_GPIO_Init(void){ //GPIO初始化设置
  10.         GPIO_InitTypeDef  GPIO_InitStructure;        
  11.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC,ENABLE);      
  12.         RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);//使能DMA时钟(用于ADC的数据传送)
  13.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);//使能ADC1时钟
  14.     GPIO_InitStructure.GPIO_Pin = ADC_CH6 | ADC_CH7; //!!!选择端口                        
  15.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //选择IO接口工作方式      
  16.         GPIO_Init(ADCPORT, &GPIO_InitStructure);               
  17. }
  18. void JoyStick_Init(void){ //摇杆的挥动开关的接口初始化
  19.         GPIO_InitTypeDef  GPIO_InitStructure; //定义GPIO的初始化枚举结构       
  20.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC,ENABLE);      
  21.     GPIO_InitStructure.GPIO_Pin = JoyStick_KEY; //选择端口号(0~15或all)                        
  22.     GPIO_InitStructure.G
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表