学生党,之前学习过嵌入式的课程,跟着正点原子的视频一步一步地构建项目的工程,主要是基于标准库的开发,整个过程实在是过于繁琐。想必有的同学也应深有体会。
最近准备开始嵌入式相关的工作,打算使用HAL库进行开发,所以看了许多视频和教程做一个项目,本文主要做一个学习总结。
官网安装链接
选择适应自己的系统即可
安装过程就不细谈了,基本上就是一直下一步
打开软件,安装HAL库,这里我们选择在线安装HAL库
选择所需的芯片包,安装即可。
完事之后我们就可以新建我们的工程了
接着选择我们的芯片,这里要注意选择Proteus8.9(我安装的版本是8.9)里面有的芯片,如下图所示,因为我们之后要在Proteus里仿真
这里我们搜索STM32F103R6,选择第二种封装方式,双击即可开始我们的工程
这里我想要实现的效果是用一个按键输入控制两个LED灯的亮灭,所以我们就需要一个GPIO输入和两个GPIO输出
这里我选择PA1,PA2位输出引脚,PB0为按键输入引脚,操作方法是点击芯片上PA1(以PA1的设置为例),选择GPIO_Output即可
然后你可以右键对PA1引脚进行重命名,比如我们命名为LED1,右键然后选择“Enter User Label”,输入名称即可。
当然这一步完全可以省略233333
然后点击左侧的System Core的下拉框选择GPIO进行GPIO的配置
依次配置每个端口,包括
GPIO output level(初始化输出电平)
GPIO mode(模式)
GPIO Pull-up/Pull-down(上下拉)
Maximum output speed (输出响应速度)
User Label(用户标签): 标记这个引脚是做什么用的,便于用户理解
这里我们设置初始化两个输出电平为低电平,即灯亮,每个配置项内容如上图所示
设置按键输入为上拉,如上图所示。
接下来我们设置一下时钟,HSE(高速外部时钟)这一项选择如下图所示
点击Clock Configuration,选择HSE,然后设置频率为72MHz,如下图
由于我们是准备进行仿真,所以我们在SYS中选择Debug模式为"No Debug",如下图所示
选择Project Manager,设置项目名,项目地址,选择IDE和对应的版本,这里我们选择MDK-ARM,V5
最后,我们配置一下Code Generator,勾选生成.c文件或者./文件
完事点击右上角的GENERATE CODE按钮就完成啦!
代码生成好之后,会给一个按钮,让你定位到项目目录中,然后打开目录中的MDK-ARM文件夹,就看到了熟悉的Keil工程文件
u1s1,STM32CubeMX很是方便,不用麻烦地构建工程,不用导入各种文件,不用自己写代码设置引脚和GPIO模式等等,用图形工具就帮我们生成IDE就绪项目,接下来我们只要在Keil里面写入我们的逻辑即可
打开Keil工程,找到main.c文件,在Private user code内写入按键扫描函数
//按键扫描函数
uint8_t Key_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin)
{
/*检测是否有按键按下,按键按下为低电平,即RESET */
if (HAL_GPIO_ReadPin(GPIOx,GPIO_Pin) == RESET ) {
/*等待按键释放 */
while (HAL_GPIO_ReadPin(GPIOx,GPIO_Pin) == RESET);
return RESET;
} else
return SET;
}
然后在主函数while循环内写下如下代码
while (1)
{
if(Key_Scan(KEY_GPIO_Port,KEY_Pin) == RESET)
{
HAL_GPIO_TogglePin(GPIOA,LED1_Pin|LED2_Pin); //翻转电平
}
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
完事编译项目,生成hex文件即可导入Proteus进行仿真了
先绘制原理图,找到需要的元件,根据设置好的引脚进行连线即可。
原理图如下图所示
双击芯片STM32F103R6,导入Keil项目中生成的hex文件,设置主频为72MHz,选择PCB封装包(对应STM32CubeMX选择芯片包那一步),确定即可。
记得配置一下电源,点击上方 设计–配置供电网,然后配置VCC/VDD
就像这样
最后我们运行仿真一下,按键按下可以控制LED灯
那么我们的任务就完成了!
如何做到不直接将元件和芯片相连线?
比如上面那张原理图的按钮就没有直接和芯片连线
我们只要找到对应的引脚,点击左键拉出一条线,然后拉到网格的某个点,再次点击左键形成一个黑色的连接结点。
接着我们右键生成的这条连线,选择"添加网络标号",然后给这条连线添加标签即可
而为了将按钮和引脚PB0虚拟地连接起来,我们只需要用同样的方法给电源和按钮之间的连线添加同样的标签(即PB0)就好了,详情请看原理图
主要是做一个学习的记录,方便下次查看
我是爱学习的诸葛铁锤,觉得有用的话点个赞哈,啾咪