五向按键方向检测实验文档
- 需求分析和原理
1.1 需求分析
- **材料、基于STM32G030C8T6 单片机开发板 **:
- 底板原理图和核心板原理图:
- 目标:通过串口助手打印五向按键的方向。
- 芯片型号:STM32G030C8T6。
- 按键和ADC配置:
- ADC输入:PA1
- 五向按键输入:PA8(命名为key_five),设置为外部中断,配置为上升沿触发,下拉输入。
1.2 原理
通过配置PA8为外部中断引脚,当五向按键被按下时,PA8会产生上升沿触发中断。在中断处理函数中,读取PA1的ADC值,根据不同的ADC值判断按键的方向,并通过串口将方向信息打印出来。
- 实验过程
2.1 实验步骤
- 配置STM32CubeMX生成初始化代码。
- 编写关键代码实现按键方向检测和串口打印。
- 编译并下载程序到STM32G030C8T6芯片。
- 使用串口助手观察并验证按键方向检测效果。
2.2 STM32CubeMX配置流程
- 打开STM32CubeMX,选择STM32G030C8T6芯片。
- GPIO/ADC 配置PA1为ADC1_IN1。
- GPIO/GPIO配置PA8为GPIO_EXTI8,选择上升沿触发模式,内部下拉。
- 勾选USART1 并配置mode为 asynchronous (异步)
- 在NVIC 下勾选 EXTI line 4 to 15 interrupts 和 USART1 global interrupt/USART1 wake-up through EXTI line 25
Project Manager
下配置项目名、路径、工具链 MDK-ARM V5,Code Generator勾选 Generate peripheral initialization as a pair of’c/.h fles per peripheral
- 生成初始化代码,使用Keil 5进行项目开发。
2.3 Keil 5 代码
main.c 关键函数
#include "main.h"
#include "adc.h"
#include "usart.h"
#include "gpio.h"
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */
/* USER CODE END PFP */
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
#include "stdio.h"
#include "string.h"
__ASM (".global __use_no_semihosting");
struct FILE {
int handle; };
FILE __stdout;
void _sys_exit(int x) {
x = x; }
void _ttywrch(int ch){
ch = ch;}
int fputc(int ch, FILE *f)
{
uint8_t temp[1] = {
ch};
HAL_UART_Transmit(&huart1, temp, 1