完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
|
相关推荐
1个回答
|
|
3.1前言
我们在上一节已经知道了点灯操作,相当于是学会了GPIO输出的配置,接下来是GPIO输入完成按键扫描的操作。 前期准备
3.2 KEY按键 同样的我们先来看看按键模块的原理图部分: 当按键没有按下时,按键部分相当于断路,PC13的电压相当于电容两端电压为3.3V。 1、新建工程 搜索或者筛选芯片后,点击Start Project成功创建一个项目。 2、时钟配置 点击RCC进入时钟配置,配置高速时钟为外部晶振,软件自动配置了两个晶振的引脚如图PD0和PD1 3、Debug配置为DAP 4、输入模式配置
5、时钟配置 这里我们还是一样配置为最高的时钟频率72M,在对应的框中输入72,按下回车即可见到如下两图的变化。按下回车前如图: 按下回车后如图: 6、项目管理配置以及代码生成配置 同样的我们填写好工程名KEY,选择好文件路径,以及所用的IDE以及版本号即可 代码生成选择好这两个后点击右上角按钮,产生代码: 7、业务逻辑代码 API 我们再来看看GPIO模块对应的API函数: /* 初始化和删除初始化函数, HAL_GPIO_Init:cubemx生成代码后自动调用初始化函数 HAL_GPIO_DeInit:解除初始化,不想使用时可以主动使用*/ void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init); void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin); /* 操作GPIO的函数,包括读取,写入,翻转,加锁,中断服务函数以及回调函数 HAL_GPIO_ReadPin:读取引脚电平 HAL_GPIO_WritePin:写入引脚电平 HAL_GPIO_TogglePin:翻转引脚电平 HAL_GPIO_LockPin:所以引脚当前电平,将无法改变 HAL_GPIO_EXTI_IRQHandler:引脚的中断服务函数 HAL_GPIO_EXTI_Callback:引脚的中断回调函数 */ GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState); void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin); void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin); main( )函数 我们可以在main.h中看到之前定义的用户标签,如下: #define LED1_Pin GPIO_PIN_14 #define LED1_GPIO_Port GPIOC #define LED2_Pin GPIO_PIN_15 #define LED2_GPIO_Port GPIOC 下面是mian()函数: int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* 复位所有外设,以及初始化Flash接口和嘀嗒定时器 */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* 之前在 Clock Configuration 配置的时钟生成为此函数 */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* 初始化所有的外设,GPIO外设在此初始化 */ MX_GPIO_Init(); /* USER CODE BEGIN 2 */ /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { HAL_Delay(500); HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin); HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin); /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ } |
|
|
|
只有小组成员才能发言,加入小组>>
imx6ull 和 lan8742 工作起来不正常, ping 老是丢包
3363 浏览 0 评论
3370 浏览 9 评论
3061 浏览 16 评论
3551 浏览 1 评论
9182 浏览 16 评论
1304浏览 3评论
670浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
663浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2411浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1978浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-2-24 04:42 , Processed in 0.973853 second(s), Total 77, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191