一、创建工程
1.新建文件夹
2.打开新建的工程文件夹,在文件夹下新建如下文件
3、CMSIS文件夹下存放的文件如下
其中startup中存放的文件为启动文件
4、DOC文件存放客户说明文件 5、Libraries文件夹存放库文件 将路径:en.stsw-stm32054_v3-6-0\STM32F10x_StdPeriph_Lib_V3.6.0\Libraries 下的inc和src两个文件夹复制到新建的Libraries文件夹中
6、Project文件夹用于存放我们自己建立的Keil5工程文件 7、User文件夹新建main.c文件 8、打开Keil5,新建工程,工程目录为刚才新建的Project文件夹,选择STM32F103C8芯片
9、工程建好后,点盒子按钮,新建与刚才相同的文件夹名,并将其中的所有文件都通过AddFile加入到这里。
全部添加好后如图:
10、点击魔法棒按钮进行配置,点C/C++,在Define那儿输入USE_STDPERIPH_DRIVER,目的是编译include “stm32f10x.h”然后,将刚才新建的文件夹添加到include Paths
点击Debug,选ST-Link,再在Setting里找到FlashDownload勾选Reset and Run
在User文件目录下新建三个文件:main.c、led.c、led.h,并在Keil5中左边的目录下加入已存在的文件,将这三个文件加入进来
二、代码实现
main.c
#include "stm32f10x.h" // Device header #include "led.h" /*函数名:Delay *功能描述:不精确的延时,延迟时间=nCount/7200,单位ms,72MHZ为STM32主频 *输入参数:nCount *输出参数:无 */ void Delay(__IO u32 nCount) { for(;nCount !=0; nCount--); } int main(void) { LED_Init();//初始化ABC所有端口 while(1) { //A亮,低电平点亮 GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_SET); GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_RESET);//Bit_RESET电平0,Bit_SET电平1 Delay(720000); //B亮 GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET); GPIO_WriteBit(GPIOB, GPIO_Pin_1, Bit_RESET); Delay(720000); //将上一个点亮的熄灭,C亮 GPIO_WriteBit(GPIOB, GPIO_Pin_1, Bit_SET); GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_RESET); Delay(720000); //延迟10ms } }
led.c
#include "led.h" #include "stm32f10x.h" // Device header void LED_Init(void) { //定义了GPIO_InitTypeDef类型的结构体变量 GPIO_InitTypeDef GPIO_InitStructure, GPIO_InitStructureB, GPIO_InitStructureC; //时钟配置 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//开启PA0口的时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //输入输出模式设置,输出速度设置 // A0 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;// 点灯用推挽输出 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;// 选择0号引脚 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//选择输出速度 //配置B1 GPIO_InitStructureB.GPIO_Mode = GPIO_Mode_Out_PP;// 点灯用推挽输出 GPIO_InitStructureB.GPIO_Pin = GPIO_Pin_1;// 选择1号引脚 GPIO_InitStructureB.GPIO_Speed = GPIO_Speed_50MHz;//选择输出速度 //配置C13 GPIO_InitStructureC.GPIO_Mode = GPIO_Mode_Out_PP;// 点灯用推挽输出 GPIO_InitStructureC.GPIO_Pin = GPIO_Pin_13;// 选择13号引脚 GPIO_InitStructureC.GPIO_Speed = GPIO_Speed_50MHz;//选择输出速度 GPIO_Init(GPIOA, &GPIO_InitStructure);// GPIOA外设的0号引脚配置为推挽输出、50MHz速度 GPIO_Init(GPIOB, &GPIO_InitStructureB); GPIO_Init(GPIOC, &GPIO_InitStructureC); }
led.h
#ifdef __LED_H #define __LED_H #include "stm32f10x.h" // Device header void LED_Init(void);//函数声明 #endif
三、示波器显示
1、如何调出示波器
Debug处选择“Use Simulator" Dialog DLL
处:DARMSTM.DLL Parameter
处(我的STM32芯片型号):pSTM32F103C8 硬件仿真填入:TARMSTM.DLL
然后点击仿真按钮开始仿真 打开逻辑分析仪窗口
点击View菜单,选择“Symbols Windows"选项,在弹出的窗口里”Special Function Register"里找到查看波形引脚
例如这里选择GPIOA_IDR,按住后将其拖入逻辑分析仪窗口
点击“Setup”,将“Display Type”选为“Bit",且用”And Mask“和”Shift Right"来过滤掉不需要显示的位
然后关闭全速运行即可看见指定引脚的波形 我用的端口为:A0,B1,C13
2、示波器结果
3、分析
我们程序写的是低电平点亮,所以每次有两个高电平一个低电平
一次波形变化,相差时间为:65.26719-65.19378s 相差73.40743ms 结论:时序状态正确,高低电平转换周期为73.40743ms