嵌入式作业七(stm32寄存器和标准库方式点亮流水灯)

目录

器材

一、使用寄存器方式点亮流水灯

1、KeilMDK工程创建

2、.c文件

3、运行效果

二、使用标准库方式点亮流水灯

1、KeilMDK工程创建

2、项目配置

3、.c文件

 4、运行效果

三、亮灭准确周期

参考资料:

器材

单片机:stm32f103C8T6
TTL转接口
三个红黄绿LED发光二极管
若干杜邦线
KeilMDK软件
单片机下载软件mcuisp
使用引脚:A1,B1,B10


一、使用寄存器方式点亮流水灯

1、KeilMDK工程创建

(1)Project->New μVision Project

(2)设置文件名(liushui1)

(3) 选择使用的单片机(stm32F103C8)

(4) CMSIS->CORE,Device->Starup

2、.c文件

#include "stm32f10x.h"

void delay_ms(uint16_t time)
{
	uint16_t i = 0;
	while(time--)
	{
		i = 10000;
		while(i--);
	}
}

int main(void)
{
	//时钟使能A,B
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	
	//配置
	GPIO_InitTypeDef led_initA1;
	led_initA1.GPIO_Pin = GPIO_Pin_1;
	led_initA1.GPIO_Mode = GPIO_Mode_Out_PP;
	led_initA1.GPIO_Speed = GPIO_Speed_10MHz;
	
	GPIO_InitTypeDef led_initB1;
	led_initB1.GPIO_Pin = GPIO_Pin_1;
	led_initB1.GPIO_Mode = GPIO_Mode_Out_PP;
	led_initB1.GPIO_Speed = GPIO_Speed_10MHz;
	
	GPIO_InitTypeDef led_initB10;
	led_initB10.GPIO_Pin = GPIO_Pin_10;
	led_initB10.GPIO_Mode = GPIO_Mode_Out_PP;
	led_initB10.GPIO_Speed = GPIO_Speed_10MHz;
	
	//初始化
	GPIO_Init(GPIOA, &led_initA1);
	GPIO_Init(GPIOB, &led_initB1);
	GPIO_Init(GPIOB, &led_initB10);
	while(1)
	{
		GPIO_ResetBits(GPIOB, GPIO_Pin_1);
		GPIO_ResetBits(GPIOB, GPIO_Pin_10);
		GPIO_SetBits(GPIOA, GPIO_Pin_1);
		delay_ms(1000);
		GPIO_ResetBits(GPIOA, GPIO_Pin_1);
		GPIO_ResetBits(GPIOB, GPIO_Pin_10);
		GPIO_SetBits(GPIOB, GPIO_Pin_1);
		delay_ms(1000);
		GPIO_ResetBits(GPIOA, GPIO_Pin_1);
		GPIO_ResetBits(GPIOB, GPIO_Pin_1);
		GPIO_SetBits(GPIOB, GPIO_Pin_10);
		delay_ms(1000);
	}
}

3、运行效果

二、使用标准库方式点亮流水灯

1、KeilMDK工程创建

 (1)Project->New μVision Project

(2)设置文件名(liushui1)

(3) 选择使用的单片机(stm32F103C8)

(4)直接选择ok

 

(5) 在文件夹中建立user,lib,core,obj文件夹,并删除原有地LIsting和Objects文件夹

(6)获取库函数文件

 官网获取地址:STSW-STM32054 - STM32F10x标准外设库 - 意法半导体STMicroelectronics

(7)在库函数中拷贝相关文件到对应文件夹下

core文件夹:

 lib文件夹:

user文件夹:

 (8)将其在keil中导入项目中

最后效果

 

2、项目配置

(1)OutPut路径配置:选择自己建的obj文件,勾选生成hex文件

 

(2) 配置全局宏定义变量

3、.c文件

最后,需要将main.c中的代码都删掉,写你自己的代码

#include "stm32f10x.h"

void delay_ms(uint16_t time)
{
	uint16_t i = 0;
	while(time--)
	{
		i = 10000;
		while(i--);
	}
}

int main(void)
{
	//时钟使能A,B
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	
	//配置
	GPIO_InitTypeDef led_initA1;
	led_initA1.GPIO_Pin = GPIO_Pin_1;
	led_initA1.GPIO_Mode = GPIO_Mode_Out_PP;
	led_initA1.GPIO_Speed = GPIO_Speed_10MHz;
	
	GPIO_InitTypeDef led_initB1;
	led_initB1.GPIO_Pin = GPIO_Pin_1;
	led_initB1.GPIO_Mode = GPIO_Mode_Out_PP;
	led_initB1.GPIO_Speed = GPIO_Speed_10MHz;
	
	GPIO_InitTypeDef led_initB10;
	led_initB10.GPIO_Pin = GPIO_Pin_10;
	led_initB10.GPIO_Mode = GPIO_Mode_Out_PP;
	led_initB10.GPIO_Speed = GPIO_Speed_10MHz;
	
	//初始化
	GPIO_Init(GPIOA, &led_initA1);
	GPIO_Init(GPIOB, &led_initB1);
	GPIO_Init(GPIOB, &led_initB10);
	while(1)
	{
		GPIO_ResetBits(GPIOB, GPIO_Pin_1);
		GPIO_ResetBits(GPIOB, GPIO_Pin_10);
		GPIO_SetBits(GPIOA, GPIO_Pin_1);
		delay_ms(1000);
		GPIO_ResetBits(GPIOA, GPIO_Pin_1);
		GPIO_ResetBits(GPIOB, GPIO_Pin_10);
		GPIO_SetBits(GPIOB, GPIO_Pin_1);
		delay_ms(1000);
		GPIO_ResetBits(GPIOA, GPIO_Pin_1);
		GPIO_ResetBits(GPIOB, GPIO_Pin_1);
		GPIO_SetBits(GPIOB, GPIO_Pin_10);
		delay_ms(1000);
	}
}

 4、运行效果

三、亮灭准确周期

1.设置options for target:

2.设置Debug

3.设置检测引脚

4.波形图

可以看出循环一周下来时间大约是2.5s。 

而延迟函数调整的实际时间是0.84s左右。


参考资料:

STM32寄存器和标准库点流水灯-CSDN博客

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值