完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
一、安装环境
首先的工作是配置编程环境,注意的是安装路径不要有中文,安装STM32CubeMX需要电脑先有JAVA环境。 二、使用步骤 1.STM32CubeMX新建工程 首先打开STM32CubeMX,点击 ACCESS TO MCU SELECTOR 稍等片刻进入设置界面 先在左上角①处输入芯片型号,我们这里用的是STM32F103C8Tx(输入F103C8也能找到) 然后右侧就会出现我们所要的芯片,双击②所选范围进入下一阶段 先选择 Pinout & Configuration→System Core 其中的SYS和RCC如图配置 然后选择时钟配置Clock Configuration ②中输入72或者64(我们这里输入64),回车,跳出的界面选OK 进入Project Manager的Project,注意要将③中的Toolchain/IDE换成MDK-ARM(这个很重要,一开始没有注意到这点,导致创建的文件夹里都没有需要的工程文件) 最后选择Code Generator,把Genearted files的第一个选择项选上,然后点击右上角的GENERATE CODE 就新建好工程了 点击出现的Open Folder打开目标文件、Open Project则打开工程文件(已安装keil) 2.根据需求改STM32CubeMX配置 根据项目的需求在 Pinout & Configuration这里点击PA8选择GPIO_Input,右键选择Enter User Label改名字为Button 然后左边点击GPIO将下面的状态改成如图,点击右上角的GENERATE CODE 就配置完成,然后进入工程文件 3.按键消抖代码编写 STM32CubeMX 已经默认设置 Systick 为 1ms 中断,那么我们可以直接利用起来。打开 MDK-ARM 工程,按下组合键 Ctrl+N(按住 Ctrl 键再按 N 键),新建一个文件,再按下组合键 Ctrl+S,文件名改为 button.c,保存到 MiaowLabs-DEMO 的 Src 文件夹里。来到这里,我们虽然新建了button.c 源文件,但是还没有把该文件加入到 MDK-ARM 工程里。我们 在 MDK-ARM 工程界面左侧 Project 栏目双击 Application/User 文件夹,把 button.c 加进来。 双击 button.c 文件,把下面代码敲进去。 #include "button.h" #include "main.h" #include "stm32f1xx_it.h" #include "stm32f1xx_hal_gpio.h" int iButtonCount;//i代表int型变量,ButtonCount表示按键计数变量 int iButtonFlag;//i代表int型变量,ButtonFlag表示重按键标志,1代表重新按键,0为没有重新按键 int g_iButtonState;//g是globle代表全局变量,会在其他地方引用;i代表int型变量,ButtonState表示按键标志,1代表按下,0代表松开 void ButtonScan(void) { if( HAL_GPIO_ReadPin(Button_GPIO_Port,Button_Pin) == GPIO_PIN_RESET )//如果引脚检测到低电平 { iButtonCount++; //按键按下,计数iButtonCount加1 if(iButtonCount>=30) //1ms中断服务函数里运行一次,iButtonCount大于等于30,即按键已稳定按下30ms { if(iButtonFlag==0) //判断有没有重按键,1为有,0为没有 { g_iButtonState=1; //设置按键标志 iButtonCount=0; iButtonFlag=1; //设置重按键标志 } else //如果重按键,则重新计数 iButtonCount=0; } else //如果没有稳定按下30ms,则代表没有按下按键 g_iButtonState=0; } else //如果一直无检测到低电平,即一直无按键按下 { iButtonCount=0; //清零iButtonCount g_iButtonState=0; //清除按键标志 iButtonFlag=0; //清除重按键标志 } if(g_iButtonState == 1) { HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);//翻转LED引脚(PB12)的电平 } } 其中这段代码的意思就是:如果按键状态标志为 1 ,则代表按键被按下了,这时候进行 LED 电平翻转 if(g_iButtonState == 1) { HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);//翻转LED引脚(PB12)的电平 } 再新建一个文件 button.h 头文件,把文件保存到 Inc 文件夹。然后,把下面代码敲进去。 #ifndef __BUTTON_H #define __BUTTON_H extern int g_iButtonState;//声明外部变量,方便其他地方引用 void ButtonScan(void);//声明按键扫描函数 #endif 打开 stm32fxx_it.c 文件,在 /* USER CODE BEGIN Includes / 与 / USER CODE END Includes */ 之间加入 #include “button.h”。 在 stm32fxx_it.c 文件里面 SysTick_Handler() 函数里加入按键扫描函数 ButtonScan()。 代码已经编写好了。这时候,点击编译按钮,会提示没有错误和警告。把代码烧录进 MiaowLabs-STM32F1-Micro 核心板,然后按下用户按键,可以发现按一下 LED 会亮,再按一下 LED 就会灭掉。就这样,我们实现了通过按键控制 LED 亮灭的功能。 4.烧录代码 之前做物创的时候烧录用的是ST-Link,但是今天教我们用的是mcuisp烧录,个人感觉还是ST-Link比较方便。 其中mcuisp也有几个要注意的点在图中标注出来了 三、遇到的问题 一开始我把PA8命名为Botton_Pin,但是在函数HAL_GPIO_ReadPin()里面调用的时候用了botton_Pin,大小写不同导致找不到这个变量,刚开始还以为是没有调用定义的头函数,但是还是报错。 然后我就去gpio.c文件里面查命名,果然 /*Configure GPIO pin : PtPin */ GPIO_InitStruct.Pin = Button_Pin; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(Button_GPIO_Port, &GPIO_InitStruct); 看样子之后还是要多多注意大小写,细节还是得注意 四、编程环境配置 代码自动补全 Edit->Configuration 代码格式化 使用AStyle进行代码格式化 添加Astyle菜单的方法: 1:uVision4中单击Tools菜单—Customize Tools Menu 2:添加Astyle All Files 和Astyle Current File菜单(自定义菜单名,可以使用中文) 我在这里添加了两个菜单,分别是格式化当前文件和格式化project中的所有文件。 3:添加Command命令:单击…按钮,选择Astyle.exe。 格式化前 格式化后 |
|
|
|
只有小组成员才能发言,加入小组>>
3280 浏览 9 评论
2958 浏览 16 评论
3460 浏览 1 评论
9004 浏览 16 评论
4052 浏览 18 评论
1115浏览 3评论
573浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
571浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2303浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1859浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 12:06 , Processed in 1.344856 second(s), Total 80, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号