当前位置:   article > 正文

【STM32+HAL】三轴按键PS2摇杆

【STM32+HAL】三轴按键PS2摇杆

一、准备工作:

有关CUBEMX的初始化配置,参见我的另一篇blog:【STM32+HAL】CUBEMX初始化配置

有关定时器触发ADC模式配置,详见【STM32+HAL】ADC采集波形实现

二、所用工具:


1、芯片: STM32F407VET6

2、CUBEMX

3、IDE: MDK-Keil软件

4、STM32F4xxHAL库

三、实现功能:

读取x,y轴的偏移量(模拟量),以及z轴(数字量——按下为低电平)

 " 特别提醒,通常我们买来的双轴按键PS2摇杆,上图中的R1位置的电阻是没有焊上的,实际该电阻是一个上拉电阻,如果我们没有焊的话是无法进行Z轴检测的。如果我们需要进行Z轴检测,我们需要在R1的位置焊上一个10KΩ电阻。”

四、HAL库配置:

1、ADC1开启

ADC1-IN1为x轴

3、ADC2开启

ADC2-IN2为轴

3、中断配置

adc可不开启中断,亲测有效

4、gpio配置

至此,HAL库配置完毕

五、keil填写代码:

1、初始化
  1. #include "stdio.h"
  2. int fputc(int ch, FILE *f)
  3. {
  4. HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);
  5. return ch;
  6. }
  7. int fgetc(FILE *f)
  8. {
  9. uint8_t ch = 0;
  10. HAL_UART_Receive(&huart1, &ch, 1, 0xffff);
  11. return ch;
  12. }
  13. #define SAMP 20
  14. uint16_t adc1[SAMP]={0},adc2[SAMP]={0};
  15. printf("Hello World\r\n");
  16. HAL_Delay(300);
  17. HAL_ADC_Start_DMA(&hadc1,(uint32_t *)adc1,SAMP);
  18. HAL_ADC_Start_DMA(&hadc2,(uint32_t *)adc2,SAMP);

2、串口打印x,y轴坐标值 
  1. for(int i=0;i<20;i++)
  2. printf("%d,%d\r\n",adc1[i],adc2[i]);

3、检测z轴是否按下
  1. if(HAL_GPIO_ReadPin(Z_AXIS_GPIO_Port,Z_AXIS_Pin) == GPIO_PIN_SET)
  2. HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_SET);
  3. else
  4. HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_RESET);

六、巨人之肩

【STM32外设系列】双轴按键PS2摇杆

七、源码提供

资源【STM32+HAL】三轴按键PS2摇杆

八、结语

本人能力有限,代码未必是最优解,若有可改进之处望在评论区留言,采纳有赏~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/500977
推荐阅读
相关标签
  

闽ICP备14008679号