一、硬件搭建
(一块面包板+STM32最小系统板+STLINK下载器+一个灯)
二、新建工程
STM32新建工程的步骤如下:
1、
2、新建一个文件夹
3、创建输入Project文件名
4、
5、这个窗口叉掉
6、新建3个文件夹
7、打开固有文件
8、找到启动文件
9、复制
10、放到之前新建的Stat文件夹下
11、在复制这3个文件
12、粘贴到Start文件夹下
13、复制这两个文件
14、粘贴到Start文件夹下
15、打开src全选复制
16、粘贴到Library文件夹下
17、然后打开inc全选复制,也粘贴到Library文件夹下
18、
19、
20、
21、粘贴到我们之前新建的User文件夹下
22、然后回到Keil软件,点击三个箱子
23、然后把默认的这个组叉掉
24、新建三个组
25、
26、添加文件
27、添加Library文件
28、添加User文件。然后点击OK就完成了
29、添加我们新建的文件夹的路径。点击OK完成
30、填写下面的英文
31、选择STLINK。然后点击Settings
32、
33、
34、编译没有报警,下载完成
测试代码如下:
#include "stm32f10x.h" // Device header
int main(void)
{
while(1)
{
}
}
三、代码编写
1、使用STM32点亮一盏灯。代码如下:
#include "stm32f10x.h" // Device header
int main(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //GPIO_InitTypeDef结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
// GPIO_SetBits(GPIOA,GPIO_Pin_0); //点亮一盏灯
GPIO_ResetBits(GPIOA,GPIO_Pin_0); //熄灭一盏灯
while(1)
{
}
}
2、使用STM32控制一盏灯闪烁。代码如下:
#include "stm32f10x.h" // Device header
void Delay_ms1(int n)
{
int i,j;
while(n--)
{
for(i=100;i>1;i--)
for(j=100;j>1;j--);
}
}
int main(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //GPIO_InitTypeDef结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
//GPIO_SetBits(GPIOA,GPIO_Pin_0); //点亮一盏灯
//GPIO_ResetBits(GPIOA,GPIO_Pin_0); //熄灭一盏灯
//GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);//熄灭一盏灯
while(1)
{
GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);//点亮一盏灯
Delay_ms1(500);
GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);
Delay_ms1(500);
}
}
2、STM32流水灯设计。
硬件搭建如下:
代码如下:
#include "stm32f10x.h" // Device header
void Delay_ms(int n)
{
int i,j;
while(n--)
{
for(i=100;i>1;i--)
for(j=100;j>1;j--);
}
}
int main(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //GPIO_InitTypeDef结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
while(1)
{
GPIO_Write(GPIOA,~0x0001); //0000 0000 0000 0001
Delay_ms(500);
GPIO_Write(GPIOA,~0x0002); //0000 0000 0000 0002
Delay_ms(500);
GPIO_Write(GPIOA,~0x0004); //0000 0000 0000 0004
Delay_ms(500);
GPIO_Write(GPIOA,~0x0008); //0000 0000 0000 0008
Delay_ms(500);
GPIO_Write(GPIOA,~0x0010); //0000 0000 0000 0010
Delay_ms(500);
GPIO_Write(GPIOA,~0x0020); //0000 0000 0000 0020
Delay_ms(500);
GPIO_Write(GPIOA,~0x0040); //0000 0000 0000 0040
Delay_ms(500);
GPIO_Write(GPIOA,~0x0080); //0000 0000 0000 0080
Delay_ms(500);
}
}