赞
踩
有关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Ω电阻。”
ADC1-IN1为x轴
ADC2-IN2为轴
adc可不开启中断,亲测有效
至此,HAL库配置完毕
- #include "stdio.h"
- int fputc(int ch, FILE *f)
- {
- HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);
- return ch;
- }
-
- int fgetc(FILE *f)
- {
- uint8_t ch = 0;
- HAL_UART_Receive(&huart1, &ch, 1, 0xffff);
- return ch;
- }
-
-
-
- #define SAMP 20
-
- uint16_t adc1[SAMP]={0},adc2[SAMP]={0};
-
-
- printf("Hello World\r\n");
- HAL_Delay(300);
-
- HAL_ADC_Start_DMA(&hadc1,(uint32_t *)adc1,SAMP);
- HAL_ADC_Start_DMA(&hadc2,(uint32_t *)adc2,SAMP);
- for(int i=0;i<20;i++)
- printf("%d,%d\r\n",adc1[i],adc2[i]);
- if(HAL_GPIO_ReadPin(Z_AXIS_GPIO_Port,Z_AXIS_Pin) == GPIO_PIN_SET)
- HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_SET);
- else
- HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_RESET);
本人能力有限,代码未必是最优解,若有可改进之处望在评论区留言,采纳有赏~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。