stm32学习笔记----LED灯

文章目录

  • 目标
  • 代码
    • 目标一:不同颜色LED
    • 目标二:LED闪烁
  • 理论点杂记
    • 什么叫推挽输出?
    • 什么叫开漏输出?
    • 杂点

目标

在学习了野火F103入门篇教学后,进行简单练习。

本程序是在野火的官方文件修改而成,文件地址是
1-[野火]《STM32库开发实战指南》(标准库源码)【优先学习】\1-书籍配套例程-F103VE指南者\7-新建工程-寄存器版本\REG-LED

任务目标:
1、让LED点亮不同颜色。
2、写一个简单的延时函数,让LED闪烁。

代码

目标一:不同颜色LED

#include "stm32f10x.h"

int main (void)
{

	// 打开GPIO端口时钟
	*( unsigned int * )0x40021018 |=  ( (1) << 3 );	

	// 配置io口为输出
	*( unsigned int * )0x40010C00 |=  ( (1) << (4*0) );
	
	*( unsigned int * )0x40010C0C &=~(1<<0);
	
	// 控制ODR寄存器
	*( unsigned int * )0x40010C0C &= ~(0<<0);
		
}




void SystemInit(void)
{
	//函数体为空,目的是为了骗过编译器
}

此时LED显示绿光
stm32学习笔记----LED灯_第1张图片
想要改变LED的灯光颜色,只需要将下列语句中的<<0改成响应位置的值

*( unsigned int * )0x40010C00 |=  ( (1) << (4*0) );
	
	*( unsigned int * )0x40010C0C &=~(1<<0);
	

	*( unsigned int * )0x40010C0C &= ~(0<<0);

比如蓝色灯光改成1

*( unsigned int * )0x40010C00 |=  ( (1) << (4*1) );

stm32学习笔记----LED灯_第2张图片

红色为5

*( unsigned int * )0x40010C00 |=  ( (1) << (4*5) );

stm32学习笔记----LED灯_第3张图片
还可以同时打开多个,显示更多颜色,比如同时输出0和5的

*( unsigned int * )0x40010C00 |=  ( (1) << (4*1) );

	*( unsigned int * )0x40010C00 |=  ( (1) << (4*0) );

stm32学习笔记----LED灯_第4张图片

目标二:LED闪烁

首先编写一个延时函数

void time(int t)
{
	int i,b,j;
	for(i=0;i<t;i++)
	 for(b=0;b<600;b++)
			{j=0;}
}

然后在主函数里添加while(1)循环,灯亮,灭。

int main (void)
{
while(1)
{

	*( unsigned int * )0x40021018 |=  ( (1) << 3 );	

	*( unsigned int * )0x40010C00 |=  ( (1) << (4*0) );
	
	*( unsigned int * )0x40010C0C &=~(1<<0);
	
	*( unsigned int * )0x40010C0C &= ~(0<<0);
		time(1000);
	
	*( unsigned int * )0x40010C0C |= (1<<0);

		time(1000);
}
}

效果如下:
stm32学习笔记----LED灯_第5张图片

理论点杂记

什么叫推挽输出?

1、可以输出高低电平,用于连接数字器件,高电平由VDD决定,低电平由VSS决定。
2、推挽结构指两个三极管受两路互补的信号控制,总是在一个导通的时候另外一个截止,优点开关效率效率高,电流大,驱动能力强。
3、输出高电平时,电流输出到负载,叫灌电流,可以理解成推,输出低电平时,负载电流流向芯片,叫拉电流,即挽。

什么叫开漏输出?

1、只能输出低电平,不能输出高电平。
2、如果要输出高电平,则需要外接上拉。
3、开漏输出具有“线与”功能,一个为低,全部为低,多用于I2C和SMBUS总线。

杂点

1、在使用keil 5时在头文件包含时(include)如果使用的是<>表示该文件不在当前工程文件目录下,而是在编译器目录下;“”表示头文件在当前工程目录下,如果找不到再去编译器目录下去找。“”比<>范围更广。

2、在文件编译生成的.axf文件是通过编译器下载,而生成的.hex文件是通过串口下载。

你可能感兴趣的:(stm32学习与应用,c++,单片机,stm32)