asp的公司网站长沙网页推广价格公司
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_8void 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


Debug选项卡


Utilities选项卡

6代码修改



7烧录验证
![]()


