文章目录
一、搭建STM32开发环境(HAL库环境)
1、安装STM32CubeMX
1.1、下载STM32CubeMX:
官网下载地址:
https://www.st.com/en/development-tools/stm32cubemx.html
(1)进入官网下载STM32CubeMX软件:
(2)根据自己的电脑操作系统进行选择合适的软件包以及选择软件包的版本号:
(3)点击ACCEPT:
(4)下载完成:
1.2、安装STM32CubeMX:
(1)双击刚刚下载的STM32CubeMX包,打开如下界面,接着点击next:
(2)接着点击accep和next:
(3)接着勾选和next:
(4)点击第一步选择安装路径,接着点击next:
(5)点击next:
(6)安装完成后,选择Next:
2、配置STM32CubeMX:安装HAL库
(1)点击打开刚刚安装好的STM32CubeMX软件
(2)点击help,再点击Updater Settings:
(3)按照图示步骤进行:
(4)按照图示进行1与2步骤:
(5)按照图示三步骤进行安装自己想要安装的HAL库版本号:
(6)弹出登录错误,要求登录下载,点击OK
(7)在弹出的界面选择登录或者注册,我已注册过,所以跳过
(8)重新下载一遍刚刚选择的hal库版本
二、利用HAL库新建keil5工程
1、创建keil5工程
(1)打开STM32CubeMX,在主界面点击:ACCESS TO MCU SELECTOR:
(2)选择的单片机型号以及点击开始工程项目:
(3)点击system core,进入SYS,在debug下选择serial wire:
(4)配置时钟,进入上面的rcc,有两个时钟,一个是hse和lse,将hse那里设为Crystal/Ceramic Resonator:
(5)打开时钟架构,APB2总线的时钟由hse控制,同时在这个界面得把PLLCLK右边选上。我们要用是GPIO接口,而这些接口都在APB2里:
(6)进入GPIO选择引脚 并且配置其工作模式:点击相应的引脚设置输出寄存器了,就是GPIO_output那一项
选择三个GPIO:PA0,PA1,PA2,均设置为了GPIO_output:
(7)点击Project Manager,接着点击Code Grenerator,勾选上第三步的那一个选项:
(8) 点击Project Manager,接着点击Project,开始给项目取名字;选择存放位置;选择MDK-ARM,最后点击图示第五步生成项目:
(9)点击Open Project打开项目(keil工程):
(10)打开main.c文件,滑倒主函数那一部分,图中所圈住的main函数:
(11)在主函数while(1)循环中写入下列代码:
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_RESET);//PA0亮灯
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);//PA1熄灯
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET);//PA2熄灯
HAL_Delay(1000);//延时1s
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);//PA0熄灯
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);//PA1亮灯
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET);//PA2熄灯
HAL_Delay(1000);//延时1s
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);//PA0熄灯
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);//PA1熄灯
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);//PA2亮灯
HAL_Delay(1000);//延时1s
2、keil5查看仿真波形图
我这里选择的引脚仿真波形对应的颜色为:
PA0——红色;
PA1——绿色;
PA2——蓝色;
3、结果演示
4、proteus仿真
(1)电路图
(2)双击stm32,传入hex文件
(3)按以下框出部分一次点击,进行仿真
(4)仿真结果
三、采用中断模式编程控制LED流水灯工作
1、什么是中断,中断有什么作用
中断是指CPU在执行当前程序时系统出现了某种状况,使得CPU必须停止当前程序,而去执行另一段程序来处理的出现的紧急事务,处理结束后CPU再返回到原先暂停的程序继续执行,这个过程就称为中断。
使得计算机系统具备应对对处理突发事件的能力,使其能及时响应紧急事件。
提高处理器效率,如果没有中断系统,CPU就只能按照原来的程序编写的先后顺序,对各个外设进行查询和处理,即轮询工作方式,轮询方法貌似公平,但实际工作效率却很低。
这里仅做简单介绍,具体的可自行查找。
2、项目创建
在第一个LED流水灯的基础上,我们还需要进行以下配置
1、除以上三个引脚,我们还需要在选一个引脚,作为中断的触发这里选用PB5
具体操作如下图
(2)时钟配置
(3)NVIC配置
2、通过Keil配置代码
(1)在main函数上写入
uint32_t sign=0;//自定义中断标识符号
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
if(GPIO_Pin == SWITCH_Pin){
//获取B5的电位
GPIO_PinState pinState = HAL_GPIO_ReadPin(SWITCH_GPIO_Port,SWITCH_Pin);
//高电位
if(pinState==GPIO_PIN_SET)//PB5高电位流水灯亮
{
sign=1;
}
//低电位
else if(pinState==GPIO_PIN_RESET)//PB5低电位流水灯灭
{
sign=0;//PB5低电位标识
}
}
}
(2)在while循环中
switch(sign)
{
case 0:
{
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET);
HAL_Delay(500);
if(sign==1)
{
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET);
break;
}
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET);
HAL_Delay(500);
if(sign==1)
{
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET);
break;
}
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);
HAL_Delay(500);
}
case 1:
{
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET);
break;
}
}
3、运行结果
4、proteus仿真
四、gitee(码云)的注册和代码储存
1.Gitee的注册
首先进入网站:点击注册键
2. Gitee环境配置
参考https://blog.youkuaiyun.com/a6667778884554/article/details/144156163
此篇csdn完成
传输好后
五、实验心得
在基于HAL库和中断的LED流水灯开发中,HAL库简化了流程,特别是HAL_GPIO_Init函数简化了GPIO配置。通过定时器中断控制流水灯,我深入理解了中断机制。STM32CubeMX的调试功能提升了调试效率,同时项目让我体会到硬件与软件结合的重要性,为后续学习实时操作系统打下基础。
在Gitee的使用上,版本控制功能对个人项目回溯和团队项目协作都大有裨益,同时提供了代码备份与安全。Gitee操作简便,分支管理功能使项目开发条理清晰。
总之,这次经历让我在嵌入式开发和代码管理方面显著进步,培养了问题解决与团队合作能力,我将继续努力迎接挑战。
文章参考
https://blog.youkuaiyun.com/m0_63323712/article/details/133955273?spm=1001.2014.3001.5502