面包板的原理:
采用上图所示的面包板:特点:横通竖不通
stm32 最小系统板
系列:主流系列STM32F1
内核:ARM Cortex-M3
主频:72MHz
RAM:20K(SRAM)
ROM:64K(Flash)
供电:2.0~3.6V(标准3.3V)
封装:LQFP48
新建STM32工程文件:
采用标准库的方式去配置:
keil 5 里面新建工程 选择STM32S103C8T6
接下来在固件库中找到以下文件:
添加到刚刚的工程文件中去:
将头文件也加入进来:
类似于51的reg52.h
再加入寄存器的配置文件:
在keil 添加:启动文件只能选择一个,其余文件全部都要添加:
如上图所示完成配置:
接下来添加头文件路径:加入之前的Start文件夹
工程文件下 新建User 用来存放主函数:
#include "stm32f10x.h" // Device header
int main(void)
{
while (1)
{
}
}
发现没有错误:
将上述程序通过DAP烧录到版子里:
发现灯灭了:
接下来编写程序让灯亮起来:
#include "stm32f10x.h" // Device header
int main(void)
{
RCC->APB2ENR = 0x00000010;
GPIOC->CRH = 0x00300000;
GPIOC->ODR = 0x00000000;
while (1)
{
}
}
灯亮
#include "stm32f10x.h" // Device header
int main(void)
{
RCC->APB2ENR = 0x00000010;
GPIOC->CRH = 0x00300000;
GPIOC->ODR = 0x00002000;
while (1)
{
}
}
灯灭:
以上是通过寄存器的方式去配置STM32虽然代码简洁,但是不太方便。
新建Library 添加STM32的标准库:
#include "stm32f10x.h" // Device header
灯亮:
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&GPIO_InitStructure);
//GPIO_SetBits(GPIOC,GPIO_Pin_13);
GPIO_ResetBits(GPIOC,GPIO_Pin_13);
while (1)
{
}
}
灯灭:
#include "stm32f10x.h" // Device header
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&GPIO_InitStructure);
GPIO_SetBits(GPIOC,GPIO_Pin_13);
//GPIO_ResetBits(GPIOC,GPIO_Pin_13);
while (1)
{
}
}
使用库函数虽然代码冗余,但是对其他io口比较友好。
新建工程时启动文件的选择:
上表就是一些常用的启动文件:
小结:
建立工程文件夹,Keil中新建工程,选择型号
工程文件夹里建立Start、Library、User等文件夹,复制固件库里面的文件到工程文件夹
工程里对应建立Start、Library、User等同名称的分组,然后将文件夹内的文件添加到工程分组里
工程选项,C/C++,Include Paths内声明所有包含头文件的文件夹
工程选项,C/C++,Define内定义USE_STDPERIPH_DRIVER
工程选项,Debug,下拉列表选择对应调试器,Settings,Flash Download里勾选Reset and Run