STM32读取双轴遥感的数据值

简介: 笔记

一. 简介


在按键控制方面,双轴按键遥感远比按键要方便,而且使用非常简单。它一共包括三个数据引脚,分别是X轴的模拟输入,Y轴的模拟输入和按键输入,另外还有一个GND和VCC。这里VCC是一个参考电压,可以接5V,也可以接3.3V。如果接的是5V的话,那么X轴的模拟输入电压就为0-5V。

1.png


二. STM32读取双轴遥感数据


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


1.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);
}

2.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);
}


3.数据读取

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是你给它接的电压值)。

用来控制飞控或者小车非常不错,快去试试吧!

欢迎关注微信公众号 FPGA之旅 获取更多资讯。

公众号:FPGA之旅


目录
相关文章
|
数据处理 异构计算
使用STM32F103标准库实现定时器控制LED点亮和关闭
通过这篇博客,我们学习了如何使用STM32F103标准库,通过定时器来控制LED的点亮和关闭。我们配置了定时器中断,并在中断处理函数中实现了LED状态的切换。这是一个基础且实用的例子,适合初学者了解STM32定时器和中断的使用。 希望这篇博客对你有所帮助。如果有任何问题或建议,欢迎在评论区留言。
1429 2
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
1768 0
|
缓存 网络协议 算法
[蓝桥杯嵌入式]hal库 stm32 PWM的使用(随时修改占空比,随时修改频率)
[蓝桥杯嵌入式]hal库 stm32 PWM的使用(随时修改占空比,随时修改频率)
|
IDE 开发工具
使用STM32F103标准库实现自定义键盘
通过本文,我们学习了如何使用STM32F103标准库实现一个简单的自定义键盘。我们首先初始化了GPIO引脚,然后实现了一个扫描函数来检测按键状态。这个项目不仅能够帮助我们理解STM32的GPIO配置和按键扫描原理,还可以作为进一步学习中断处理和低功耗设计的基础。希望本文对你有所帮助,祝你在嵌入式开发的道路上不断进步!
1096 4
|
传感器
【经典案例】STM32F407使用HAL库配置I2C详解
STM32F407是一个强大的微控制器,广泛应用于嵌入式系统中。在许多应用中,我们需要使用I2C总线来与传感器、EEPROM、显示屏等外设进行通信。本文将详细介绍如何使用STM32 HAL库来配置和使用I2C接口。
2231 2
|
存储 数据采集 数据安全/隐私保护
使用STM32F103读取TF卡并模拟U盘:使用标准库实现
通过以上步骤,你可以实现用STM32F103将TF卡内容变成U盘进行读取。这种功能在数据采集、便携式存储设备等应用中非常有用。如果你有更多的需求,可以进一步扩展此项目,例如添加文件管理功能、加密存储等。希望这篇博客能帮到你,如果有任何问题,欢迎在评论区留言讨论!
1308 1
|
开发者
【经典案例】使用HAL库配置STM32F407的SPI外设
在嵌入式系统开发中,STM32F407是一款广泛应用的微控制器,而SPI(Serial Peripheral Interface)是一种常用的通信接口。本文将详细介绍如何使用STM32的硬件抽象层(HAL)库配置STM32F407的SPI外设,并提供完整的代码示例。
1764 1