目录
一、下载标准库
下载地址:STM32 Standard Peripheral Libraries - STMicroelectronics
标准库模板种的文件工程分布如下:
STM32工程文件夹主要包含以下几个文件夹:
•Library: 放置库文件,包含驱动程序和算法等。
•Listings: 放置汇编列表文件(.lst)。这些文件记录了编译过程中产生的汇编代码。
•Objects: 放置目标文件(.o文件),这些文件是编译源代码(.c文件)后的结果,包含机器码等。
•Start: 放置启动文件startup_stm32f10x_xx.s,包含系统时钟配置、堆栈设置、中断向量表等初始化代码。
•User: 用户代码文件夹,放置用户自己编写的源代码(.c文件)。
二、Keil创建工程
1、空文件夹新建工程,选择STM32F103C8系列单片机。
2、在Keil中新增文件组并对其命名。
3、依次将三个文件下的所有文件添加到刚刚创建的文件组中。
4、点击魔法棒,添加文件路径。
三、编写代码
1、主函数
#include "stm32f10x.h"
#include "Delay.h"
//芯片初始化
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)
{
GPIO_Write(GPIOA, ~0x0001); //0000 0000 0000 0001
Delay_ms(1000);
GPIO_Write(GPIOA, ~0x0002); //0000 0000 0000 0010
Delay_ms(1000);
GPIO_Write(GPIOA, ~0x0004); //0000 0000 0000 0100
Delay_ms(1000);
GPIO_Write(GPIOA, ~0x0008); //0000 0000 0000 1000
Delay_ms(1000);
}
}
2、Delay函数
(1)Delay.h:
#include "stm32f10x.h"
void initSysTick(void);
void Delay_us(u32 xus);
void Delay_ms(u32 xms);
(2)Delay.c:
#include "Delay.h"
/**
* 功能:SysTick定时器初始化函数
* 参数:None
* 返回值:None
*/
void initSysTick(void)
{
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
//设置时钟源8分频
SysTick->CTRL |= SysTick_CTRL_TICKINT_Msk;
//使能中断
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
//开定时器
SysTick->LOAD = 9;
//随意设置一个重装载值
}
/**
* 功能:微秒级延时函数
* 参数:xus :具体延时时间 (单位:微秒)
* 返回值:None
*/
void Delay_us(u32 xus)
{
SysTick->LOAD = 9 * xus;
//计9次为1us,xus重装载值要*9
SysTick->VAL = 0;
//计数器归零
while (!(SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk));
//等待计数完成
}
/**
* 功能:毫秒级延时函数
* 参数:xms :具体延时时间 (单位:毫秒)
* 返回值:None
*/
void Delay_ms(u32 xms)
{
SysTick->LOAD = 9000;
//计九次为1us,1000次为1ms
SysTick->VAL = 0;
//计数器归零
while (xms--)
{
while (!(SysTick->CTRL&SysTick_CTRL_COUNTFLAG_Msk));
//等待单次计数完成
}
}
进行编译:
四、电路连接
五、烧录程序
1、点击魔法棒,选择生成HEX文件。
2、打开FlyMcu,进行程序烧录,得到结果如下:
六、观察管脚的时序波形
在没有示波器条件下,可以使用Keil的软件仿真逻辑分析仪功能观察管脚的时序波形,更方便动态跟踪调试和定位代码故障点。
1、我们点开魔术棒,在’Target’中修改晶振为8.0MHZ.
2、点击Debug,进行一些配置修改。
3、打开逻辑分析仪,点击“Set Up”选项。
4、在弹出的窗口中,新建观察引脚。在框中输入(PORTA.X),想观察几号引脚,X就填几。添加完成后,一定要把每个的“Display Type"改成比特。
5、左上角点击全速运行程序,得到如下波形:
6、结论
据观察,波形是连续变化的,PA0由低变高后,PA1紧接着变成低电平。低电平持续时间为1s。