创建HAL版本MDK工程模板
1下载STM32Cube官方固件包
进入ST官网,注册,登录
搜索对应芯片固件包
我的是f1系列
点击get software
下载对应版本
解压,里面有如下文件
2创建模板文件夹
先创建如下文件夹
文件夹名称 | 作用 |
---|---|
Drivers | 存放与硬件相关的驱动层文件 |
Middlewares | 存放中间层文件 |
Output | 存放工程编译输出文件 |
Projects | 存放 MDK 工程文件 |
Users | 存放 HAL 库用户配置文件、main.c、中断处理文件,以及分散加载文件 |
Drivers 文件夹里面又包含了 4 个文件夹,它们的作用如下:
文件夹名称 | 作用 |
---|---|
BSP | 存放开发板板级支持包驱动代码,如各种外设驱动 |
CMSIS | 存放 CMSIS 底层代码,如启动文件(.s 文件)等 |
SYSTEM | 存放系统级核心驱动代码,如 sys.c、delay.c 和 usart.c 等 |
STM32F1xx_HAL_Driver | 存放 ST 提供的 F1 系列 HAL 库驱动源码 |
BSP:空着
CMSIS:到之前下载的官方固件包下改动两个地方
把整个Device文件夹粘贴到CMSIS文件夹下
此外CMSIS文件夹下还要创建一个Include文件夹,包含如下文件
这些文件可以STM32CubeMX 随便生成一个工程文件,然后找到下面这些文件,直接拷过来即可
SYSTEM:从正点原子项目下拷贝三个文件夹
STM32F1xx_HAL_Driver:直接从固件包里拷过来
Middlewares:空着
Output:空着
Projects:创建MDK-ARM
Users:拷贝三个文件过来
在创建一个main.c,内容如下
#include "sys.h"
#include "uart1.h"
#include "delay.h"
#define LED_CLK() __HAL_RCC_GPIOB_CLK_ENABLE()
#define LED_GPIO GPIOB
#define LED_PIN GPIO_PIN_8
void led_init(void); /* LED初始化函数声明 */
int main(void)
{
HAL_Init(); /* 初始化HAL库 */
stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */
led_init(); /* LED初始化 */
uart1_init(115200);
printf("running...\r\n");
while(1)
{
HAL_GPIO_WritePin(LED_GPIO,LED_PIN,GPIO_PIN_SET);
delay_ms(500);
HAL_GPIO_WritePin(LED_GPIO,LED_PIN,GPIO_PIN_RESET);
delay_ms(500);
}
}
/**
* @brief 初始化LED相关IO口, 并使能时钟
* @param 无
* @retval 无
*/
void led_init(void)
{
GPIO_InitTypeDef gpio_initstruct;
LED_CLK(); /* IO口时钟使能 */
gpio_initstruct.Pin = LED_PIN; /* LED0引脚 */
gpio_initstruct.Mode = GPIO_MODE_OUTPUT_PP; /* 推挽输出 */
gpio_initstruct.Pull = GPIO_PULLUP; /* 上拉 */
gpio_initstruct.Speed = GPIO_SPEED_FREQ_HIGH; /* 高速 */
HAL_GPIO_Init(LED_GPIO, &gpio_initstruct); /* 初始化LED0引脚 */
}
3新建工程框架
将工程保存到创建好的MDK-ARM下
选择对应的芯片,点击ok,点击close
4添加文件
创建目标及分组
向各分组添加文件
为什么加这个文件?
点击ok
有一个钥匙图标,声明他们是只读文件
找到对应文件所在目录
取消只读
点击确定
5魔术棒设置
Target选项卡
Output与Listing选项卡
C/C++选项卡
USE_HAL_DRIVER,STM32F103xB