STM32F103 CubeMX ADC 驱动 PS2游戏摇杆控制杆传感器模块
1. 硬件连接
PA1 和PA2 分别对应了ADC的两个PIN
2. CubeMX生成代码
配置debug口
配置时钟
配置ADC
配置串口
生成工程
3. 编写代码
串口重定向 将串口的代码重新使用了printf来输出,
C
#include <stdio.h>
//重定向c库函数printf到串口USARTx,重定向后可使用printf函数
int fputc(int ch, FILE *f)
{
/* 发送一个字节数据到串口USARTx */
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
return (ch);
}
3.1 分两个ADC,分别读取ADC的值
分两个ADC,分别读取ADC的值,
分两个ADC,分别读取ADC的值
c
/**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_ADC1_Init();
MX_ADC2_Init();
MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */
uint16_t ADC1_number = 0;
uint16_t ADC2_number = 0;
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1,HAL_MAX_DELAY);
ADC1_number = (uint16_t)HAL_ADC_GetValue(&hadc1);
HAL_ADC_Start(&hadc2);
HAL_ADC_PollForConversion(&hadc2,HAL_MAX_DELAY);
ADC2_number = (uint16_t)HAL_ADC_GetValue(&hadc2);
printf("adc0: %d,adc1:%d \r\n",ADC1_number,ADC2_number);
HAL_Delay(100);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
4. 后记
此ADC为12位ADC,实际的有效位数为10位左右,可以应付一些常见的场合,在使用的时候也可以多次采样,获得平均值,提升采样精度。