你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32读取双轴遥感的数据值

[复制链接]
STMCU小助手 发布时间:2022-9-7 19:04
一. 简介
在按键控制方面,双轴按键遥感远比按键要方便,而且使用非常简单。它一共包括三个数据引脚,分别是X轴的模拟输入,Y轴的模拟输入和按键输入,另外还有一个GND和VCC。这里VCC是一个参考电压,可以接5V,也可以接3.3V。如果接的是5V的话,那么X轴的模拟输入电压就为0-5V。

d2f7399ee0f74ab4bab7b03642eebc5e.png

二. STM32读取双轴遥感数据
由于输入的是模拟值,所以需要使用ADC进行模拟采集。通过数据手册可以知道,ADC是其引脚的附加功能,不需要进行复用配置。只需要将GPIO_Mode配置成AN即可,然后配置ADC的相关信息就可以了。

d0a758d507444c6d8de3f74ffb9cb947.png

GPIO初始化

  1. /*GPIO Init*/
  2. void XYRocker1GPIOInit(void)
  3. {
  4.     GPIO_InitTypeDef GPIO_InitStruct;
  5.     RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);

  6.     /*XY GPIO*/
  7.     GPIO_InitStruct.GPIO_Pin   = GPIO_Pin_0 | GPIO_Pin_1;
  8.     GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_AN;  /"附加功能"/
  9.     GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
  10.         GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
  11.     GPIO_Init(GPIOA,&GPIO_InitStruct);

  12.     /*rocker key 双轴遥感的按键*/   
  13.     GPIO_InitStruct.GPIO_Pin   = GPIO_Pin_12;
  14.     GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_IN;
  15.     GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
  16.     GPIO_Init(GPIOB,&GPIO_InitStruct);
  17. }
复制代码

ADC初始化
  1. void XYRockerADCInit(uint8_t num)
  2. {
  3.     ADC_InitTypeDef     ADC_InitStruct;
  4.     ADC_CommonInitTypeDef  ADC_ComminInitStruct;

  5.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
  6.     ADC_DeInit();
  7.         
  8.     ADC_ComminInitStruct.ADC_Mode                = ADC_Mode_Independent;
  9.     ADC_ComminInitStruct.ADC_TwoSamplingDelay    = ADC_TwoSamplingDelay_20Cycles;
  10.     ADC_ComminInitStruct.ADC_DMAAccessMode       = ADC_DMAAccessMode_Disabled;
  11.     ADC_ComminInitStruct.ADC_Prescaler           = ADC_Prescaler_Div4;
  12.     ADC_CommonInit(&ADC_ComminInitStruct);


  13.     ADC_InitStruct.ADC_Resolution           = ADC_Resolution_12b;
  14.     ADC_InitStruct.ADC_ScanConvMode         = DISABLE;
  15.     ADC_InitStruct.ADC_ContinuousConvMode   = DISABLE;
  16.     ADC_InitStruct.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
  17.     ADC_InitStruct.ADC_DataAlign                         = ADC_DataAlign_Right;//右对齐
  18.     ADC_InitStruct.ADC_NbrOfConversion      = num;
  19.     /*双轴有两个模拟输入,所以这里设置为2,如果是两个遥感,使用的是同一个ADC的话,这里设置为4*/

  20.     ADC_Init(ADC1,&ADC_InitStruct);

  21.         
  22.         ADC_Cmd(ADC1,ENABLE);
  23. }
复制代码

数据读取
  1. uint16_t getX1Value()
  2. {
  3. /*设置通道进行转换*/
  4.     ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_480Cycles );        
  5.         ADC_SoftwareStartConv(ADC1);                //使能指定的ADC1的软件转换启动功能        
  6.         while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束
  7.         return ADC_GetConversionValue(ADC1);        //返回最近一次ADC1规则组的转换结果
  8. }
复制代码

经过上面的几步,就可以进行双轴遥感的读取啦。
复位状态值为2200左右。双轴遥感向上的时候只就为0左右,向下的时候,就是65536左右了(16bit 0-65536)。左右方向也是如此。其实际的电压值,会由0-65536映射到0-VCC来(VCC是你给它接的电压值)。
————————————————
版权声明:ValentineHP

收藏 评论0 发布时间:2022-9-7 19:04

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版