一. 简介
在按键控制方面,双轴按键遥感远比按键要方便,而且使用非常简单。它一共包括三个数据引脚,分别是X轴的模拟输入,Y轴的模拟输入和按键输入,另外还有一个GND和VCC。这里VCC是一个参考电压,可以接5V,也可以接3.3V。如果接的是5V的话,那么X轴的模拟输入电压就为0-5V。
二. STM32读取双轴遥感数据
由于输入的是模拟值,所以需要使用ADC进行模拟采集。通过数据手册可以知道,ADC是其引脚的附加功能,不需要进行复用配置。只需要将GPIO_Mode配置成AN即可,然后配置ADC的相关信息就可以了。
GPIO初始化
- /*GPIO Init*/
- void XYRocker1GPIOInit(void)
- {
- GPIO_InitTypeDef GPIO_InitStruct;
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
- /*XY GPIO*/
- GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
- GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AN; /"附加功能"/
- GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
- GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
- GPIO_Init(GPIOA,&GPIO_InitStruct);
- /*rocker key 双轴遥感的按键*/
- GPIO_InitStruct.GPIO_Pin = GPIO_Pin_12;
- GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN;
- GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOB,&GPIO_InitStruct);
- }
复制代码
ADC初始化
- void XYRockerADCInit(uint8_t num)
- {
- ADC_InitTypeDef ADC_InitStruct;
- ADC_CommonInitTypeDef ADC_ComminInitStruct;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
- ADC_DeInit();
-
- ADC_ComminInitStruct.ADC_Mode = ADC_Mode_Independent;
- ADC_ComminInitStruct.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_20Cycles;
- ADC_ComminInitStruct.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;
- ADC_ComminInitStruct.ADC_Prescaler = ADC_Prescaler_Div4;
- ADC_CommonInit(&ADC_ComminInitStruct);
- ADC_InitStruct.ADC_Resolution = ADC_Resolution_12b;
- ADC_InitStruct.ADC_ScanConvMode = DISABLE;
- ADC_InitStruct.ADC_ContinuousConvMode = DISABLE;
- ADC_InitStruct.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
- ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right;//右对齐
- ADC_InitStruct.ADC_NbrOfConversion = num;
- /*双轴有两个模拟输入,所以这里设置为2,如果是两个遥感,使用的是同一个ADC的话,这里设置为4*/
- ADC_Init(ADC1,&ADC_InitStruct);
-
- ADC_Cmd(ADC1,ENABLE);
- }
复制代码
数据读取
- uint16_t getX1Value()
- {
- /*设置通道进行转换*/
- ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_480Cycles );
- ADC_SoftwareStartConv(ADC1); //使能指定的ADC1的软件转换启动功能
- while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束
- return ADC_GetConversionValue(ADC1); //返回最近一次ADC1规则组的转换结果
- }
复制代码
经过上面的几步,就可以进行双轴遥感的读取啦。
复位状态值为2200左右。双轴遥感向上的时候只就为0左右,向下的时候,就是65536左右了(16bit 0-65536)。左右方向也是如此。其实际的电压值,会由0-65536映射到0-VCC来(VCC是你给它接的电压值)。
————————————————
版权声明:ValentineHP
|