文章目录
一、以 STM32最小系统核心板(STM32F103C8T6)+面板板+3只_(或更多)红绿蓝LED 搭建电路,使用GPIOA/GPIOB/GPIOC端口控制LED灯,轮流闪烁,间隔时长1秒。
一、(一)新建项目
1.如图点击Project然后点击new uvision project
2.输入项目名称
3.点击魔法棒选择stm32芯片(注意:这里选择的芯片要与刚刚下载的保持一致)
4.创建项目出现的弹窗,只用勾选框内的CORE
5.点击魔法棒,选择output,勾选creat hex file然后点击ok
(二)编写代码
1.点击Target前的加号展开,右键点击source group,然后点击add new item
2.选择第一个,然后填写文件名字
3.写入代码
//APB2使能时钟寄存器
#define RCC_AP2ENR *((unsigned volatile int*)0x40021018)
//GPIOA配置寄存器
#define GPIOA_CRL *((unsigned volatile int*)0x40010800)
#define GPIOA_ORD *((unsigned volatile int*)0x4001080C)
//GPIOB配置寄存器
#define GPIOB_CRH *((unsigned volatile int*)0x40010C04)
#define GPIOB_ORD *((unsigned volatile int*)0x40010C0C)
//GPIOC配置寄存器
#define GPIOC_CRH *((unsigned volatile int*)0x40011004)
#define GPIOC_ORD *((unsigned volatile int*)0x4001100C)
//延时函数
void Delay_wyd( volatile unsigned int t)
{
unsigned int i;
while(t--)
for (i=0;i<800;i++);
}
int main()
{
int j=100;
//开启时钟//APB2-GPIOA、GPIOB、GPIOC外设时钟使能
RCC_AP2ENR|=1<<2;
RCC_AP2ENR|=1<<3;
RCC_AP2ENR|=1<<4;
GPIOA_CRL&=0x0FFFFFFF; //设置位 清零
GPIOA_CRL|=0x20000000; //PB5推挽输出
GPIOA_ORD|=1<<7; //设置初始灯为灭
GPIOB_CRH&=0xFFFFFF0F;
GPIOB_CRH|=0x00000020;
GPIOB_ORD|=1<<9;
GPIOC_CRH&=0x0FFFFFFF;
GPIOC_CRH|=0x30000000;
GPIOC_ORD|=0x1<<15;
while(j)
{
GPIOA_ORD=0x0<<0; //点灯1
Delay_wyd(1000000);
GPIOA_ORD=0x1<<0; //灭灯1
Delay_wyd(1000000);
GPIOB_ORD=0x0<<9; //点灯2
Delay_wyd(1000000);
GPIOB_ORD=0x1<<9; //灭灯2
Delay_wyd(1000000);
GPIOC_ORD=0x0<<15; //点灯3
Delay_wyd(1000000);
GPIOC_ORD=0x1<<15; //灭灯3
Delay_wyd(1000000);
}
}
参考:http://t.csdn.cn/BtdiP
(三)添加驱动文件
1.文件比较难找一般在安装的stm32包里面找到Device\Source\ARM
2.将此文件复制在项目文件夹下面
3.将此文件放在source group下面,右键点击source group然后选择add existing files
然后点击刚刚复制在项目目录下的驱动文件
(四)编译运行
可能会有报错test.axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f10x_md.o).`
解决办法:1.去掉驱动文件startup_stm32f10x_md.s的只读属性,找到复制在项目下的文件右键点击属性,然后取消只读勾选
将驱动文件startup_stm32f10x_md.s中的下面三行代码用“;”注释掉
; IMPORT SystemInit
; LDR R0, =SystemInit
; BLX R0
即可解决问题
二、烧录以及线路连接
(一)烧录
1.烧录软件
官网下载连接http://www.mcuisp.com/
选择我们所需要的版本
2.软件配置
1.选择“端口port”(FlyMcu会自动搜索CH340
串口对应的端口),设置“波特率bps”(对于STM32F429,推荐将波特率设置为76800 bps
)。
2.选择在项目文件夹下objects文件下的.hex文件
3.勾选“编程前重装文件“
4.勾选”编译后执行“
5.左下方选择”DTR低电平复位,RTS高电平进BootLoader"
3.插入USB TO TTL即可开始编程,显示下图即编译成功
(二)线路连接
参考:http://t.csdn.cn/DCujz
二、改用标准外设库方式使用某个端口GPIOx端口管脚控制几个LED灯,轮流闪烁,间隔时长1秒。
一、下载STM32标准固件库
官方网址:STM32标准外设软件库 - 意法半导体STMicroelectronics
打开之后点击F1,然后按照步骤注册下载
二、创建工程
1.新建项目文件夹,并创建子目录start、Library、User
2.复制标准库文件到新建工程
2.1start子目录下文件
(1)找到刚刚解压好的固件库,点击Libraries->CMSIS->CM3->DeviceSupport->ST->STM32F10x->setup->arm,这些为STM32的启动文件,全选启动文件并复制到start
(2)然后回到固件库Libraries->CMSIS->CM3->DeviceSupport->ST->STM32F10x中,找到一个.h文件和两个system开头的文件,它们分别为STM32的外设寄存器描述文件和配置时钟文件,将它们三个也复制到start下
(3)在固件库Libraries->CMSIS->CM3->CoreSupport选择.c和.h文件,这两个文件为内核的寄存器描述,也复制在start文件下
2.2Library子目录下文件
(1)在固件库Libraries->STM32F10x_StdPeriph_Driver->src,将文件全选复制粘贴到工程项目“Library”文件夹
(2)再到固件库Libraries->STM32F10x_StdPeriph_Driver->inc,将文件全选复制粘贴到工程项目“Library”文件夹
2.3User子目录下文件夹
到固件库Project->STM32F10x_StdPeriph_Template,选择main.c文件、两个it文件和conf文件复制粘贴到工程项目"User"文件夹
3.打开keil新建工程
3.1选择芯片型号
3.2添加文件到组
右键点击Target1,然后选中图片箭头
添加文件组
注意选择All files才能将文件全部添加
然后另外两个按上面步骤添加
3.3写入代码
#include "stm32f10x.h"
void delay_s(void);
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
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);
delay_s();
GPIO_Write(GPIOA, ~0x0002);
delay_s();
GPIO_Write(GPIOA, ~0x0004);
delay_s();
}
}
void delay_s(void)
{
volatile int i=0,j=0,k=0;
for(i=1000;i>0;i--)
{
for(j=1000;j>0;j--)
{
for(k=6;k>0;k--);
}
}
}
点击魔法棒进行C/C++设置
添加文件
然后编译运行
可能会遇到start/core_cm3.c(499): error: parameter references not allowed in naked functions错误
解决方法直接删除ore_cm3.c即可
4.仿真
点击魔术棒勾选Use Simulator,并修改参数如下图:
点击仿真按钮开始仿真,打开逻辑分析仪窗口
点击Setup,添加端口
点击如图运行波形
5.烧录