熟悉mdk开发环境,完成一个stm32的简单程序的编译。
提示:没有硬件之前,只能做程序的编译和仿真测试,也就是这里的方法无法下载到硬件上运行。不足之处尽请指教。
MDK5 可到 KEIL 的官网网址.下载最新版本, 这里介绍 V5.14 版本。 其它版本可参考安装。双击安装包就开始安装,比较简单,基本上点“Next”就可以了,详细说明如下:
右键点击安装包 mdk5.14.exe,以管理员身份运行,出现安装向导界面,点击“Next”。勾选“I agree to….”,点击“Next”。选择软件和支持包路径(可以保持默认),点击“Next”。填写名字等信息,点击“Next”。(英文名字) 填写注册信息 软件路径 支持包路径安装过程等几分钟。安装过程中弹出下面界面,点击“确定”。安装完成,点击“Finish”。自动更新“支持包”,也可以直接退出,自己下载安装包安装。 至此,MDK5 安装完成,可以新建工程使用了。中途可能遇到一些报错,大多情况直接无视就好
stm32详细说明如下:
再次打开刚刚解压之后的文件夹keygen依次点开ARM、KEIL1.0.4、KEIL2.2.0安装,出现错误时叉掉就ok。或者耐心的百度下解决方案,反正忽视了对新手影响不大。注册MDK5:
调小电脑音量!!以管理员方式运行keil5file–license management–复制CID码 注册机解压–打开keygen程序(噪音警告)-- 把刚刚复制的CID码粘贴上去–点击Generate–生成绿框中的注册码–复制注册码–粘贴到刚刚keil5的NEW License ID Code(LIC)位置,点击"ADD LIC",完成注册。以LED闪烁为例
这里将要实现的是STM32底座模块上的四个LED实现一个类似流水灯的效果,该实验的关键在于如何控制 STM32 的 IO 口输出。了解了 STM32 的 IO 口如何输出的,就可以实现流水灯了。
STM32 每个 IO 口可以自由编程, IO 口寄存器必须按 32 位字被访问。它们都有 7 个寄存器来控制。分别是: 2 个 32 位的端口配置寄存器 CRL 和 CRH; 2 个 32 位的数据寄存器 IDR 和 ODR; 1 个 32 位的置位/复位寄存器 BSRR; 1个 16 位的复位寄存器 BRR; 1 个 32 位的锁存寄存器LCKR。
STM32 的 IO 口位配置如图: STM32 输出模式配置如图:
LED 初始化函数代码:
//========================================================== // 函数名称: LED_Init() // // 函数功能: 初始化 LED // // 入口参数: 无 // // 返回参数: 无 // // 说明: //========================================================== void LED_Init(void) { GPIO_InitTypeDef GPIO_Initure; __HAL_RCC_GPIOA_CLK_ENABLE(); //开启 GPIOA 时钟 GPIO_Initure.Pin=LED1|LED2; //LED1、2 GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP; //推挽输出 GPIO_Initure.Pull=GPIO_PULLUP; //上拉 GPIO_Initure.Speed=GPIO_SPEED_HIGH; //高速 HAL_GPIO_Init(LED_GPIO_PORT,&GPIO_Initure); LED1_OFF();LED2_OFF(); }LED_OFF 是宏定义,对应的功能是关闭全部的 LED,相关的定义在“led.h”中,其中还有一些对单个 LED 的操作的宏定义。使用宏定义可以一定程度上简化代码,增强程序可读性,也能减少系统开销,提高运行效率。
与 LED 控制相关的宏定义:
#ifndef __LED_H #define __LED_H #include "stm32f1xx_hal.h" #include "stm32f1xx.h" #define LED_GPIO_PORT GPIOA #define LED1 GPIO_PIN_5 //LED1 #define LED2 GPIO_PIN_12 //LED2 #define LED1_ON() HAL_GPIO_WritePin(LED_GPIO_PORT,LED1,GPIO_PIN_RESET) // 开 启 LED1 #define LED2_ON() HAL_GPIO_WritePin(LED_GPIO_PORT,LED2,GPIO_PIN_RESET) // 开 启 LED2 #define LED1_OFF() HAL_GPIO_WritePin(LED_GPIO_PORT,LED1,GPIO_PIN_SET) // 关 闭 LED1 #define LED2_OFF() HAL_GPIO_WritePin(LED_GPIO_PORT,LED2,GPIO_PIN_SET) // 关 闭 LED2 extern void LED_Init(void); //LED 初始化 #endif主函数代码:
int main(void) { HAL_Init(); //初始化 HAL 库 LED_Init(); //初始化 LED while(1) { LED1_ON(); //点亮 LED1 delay_ms(500); //延时 500ms LED2_ON(); //点亮 LED2 delay_ms(500); //延时 500ms LED1_OFF(); //关闭 LED1 delay_ms(500); //延时 500ms LED2_OFF(); //关闭 LED2 delay_ms(500); //延时 500ms } }该处使用的url网络请求的数据。
编译结果: 在安装过程中常常会出现报错,可以大胆试着忽视它。另外如有问题,多多指教。