这是STM32F103学习笔记,从画PCB到软件调试,再到一个网站的keil工程,最后是一些RTOS系统移植,我希望自己能从头开始直到最后一步,如何再继续深入。
前提:自己在立创EDA上画了一个STM32最小系统板,并且免费打样,出了五片pcb,资金有限,在网上购买了五块版的物料,手动焊接完成一块,目前程序能够烧录、正常正常运行。但是网口和外部flash还有点问题待处理,由于我对硬件知识了解的不够升入,所以跳过这两个外设,直接进入软件调试部分,后续有时间再研究这两个问题。
下面我将介绍KEIL工程的从有到无:
一、前期准备:
1、最小系统板(我的芯片是STM32F103VET6)。
2、keil5软件。
3、ST官方提供的lib库
我们直接去ST的官方去下载对应芯片的相关库(ST官网)。
1、选择微控制器与微处理器。
2、选择STM32主流MCU。
3、选择STM32F1系列。
4、选择STM32F103。
5、点击STM32F103的工具与软件。
6、进入如下目录:所有工具与软件类型-》Embedded Software-》MCU 及 MPU嵌入式软件-》STM32 Standard Peripheral Libraries:
7、下载固件包即可(我选的是3.5.0版本):
下载解压后的文件包括如下:(我们要使用的就是Libraries目录下的文件:包括stm32f10x.h头文件、启动文件xxx.s、以及core_cm3文件、以及GPIO、UART、CAN、I2C等各种驱动文件,都是我们需要的)
二、创建keil工程,导入ST的库文件
1、新建keil工程,芯片选择STM32F103.
创建成功之后,keil为空工程:
接下来导入下载下来的文件我的文件格式:导入.c文件、所有头文件引用目录,以及打开宏定义:USE_STDPERIPH_DRIVER
此时创建一个main.c,自行编写main函数,整个工程即可编译。
编译可能遇到的错误:
1、.\Objects\rtthread_zt.axf: Error: L6218E: Undefined symbol assert_param (referred from misc.o).
没有定义asssert_param函数。
添加宏定义:USE_STDPERIPH_DRIVER 即可。
2、 error: #5: cannot open source input file “stm32f10x_conf.h”: No such file or directory
发现下载的库中没有此头文件,所以我们去网上找到此文件加入到工程中即可。
3、再次编译后,你会发现,他又提示stm32f10x_conf.h文件中引用的stm32f10x_type.h文件没有,这时我直接将stm32f10x_conf.h文件中的#include "stm32f10x_type.h"注释掉(不知道会不会有什么隐患,后面需要注意)。即可编译通过。
三、点亮LED
修改main函数,我的工作LED引脚为PD15,代码如下。
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
void led_pin_init(void)
{
GPIO_InitTypeDef LED_GPIO_InitStruct;
LED_GPIO_InitStruct.GPIO_Pin = GPIO_Pin_15;
LED_GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
LED_GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &LED_GPIO_InitStruct);
}
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
led_pin_init();
while(1) {
int i = 1000000;
GPIO_ResetBits(GPIOD, GPIO_Pin_15);
while(i--);
GPIO_SetBits(GPIOD, GPIO_Pin_15);
i = 1000000;
while(i--);
}
}
编译下载之后,程序正常运行,LED正常闪烁。至此,第一个KEIL工程就大功告成了!!!
最后:由于经验不足,如有错误的地方,感谢指正。