STM32F103C8T6学习 之 点亮一个led灯

本次是第一次接触STM32,所以当然先从点亮led灯开始,由于拿到手的资料并不完善,所以一开始就遇到很大问题,不知道led灯对应的引脚,寄存器是什么,也不知道怎么去实现点亮一个灯的操作

后面在网上进行了资料的搜集,通过比对再结合led的原理图,终于实现了效果。

先上代码:

led灯原理图:

STM32F103C8T6学习 之 点亮一个led灯_第1张图片

/**************************
* 本代码实现效果:         
* led1灯(绿色)间歇性闪烁
**************************/
#include "stm32f10x.h"
void Delay_ms( uint16_t time_ms );

int main()
{
	//开启时钟
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);

	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB,&GPIO_InitStructure);
	while(1)
	{
		GPIO_WriteBit(GPIOB,GPIO_Pin_1,Bit_SET);
		Delay_ms(500);
		GPIO_WriteBit(GPIOB,GPIO_Pin_1,Bit_RESET);
		Delay_ms(500);
	}
}

void Delay_ms( uint16_t time_ms )
{
	uint16_t i,j;
	for( i=0;i

 STM32的GPIO相关学习:

每个GPI/O端口有两个32位配置寄存器(GPIOx_CRLGPIOx_CRH),两个32位数据寄存器(GPIOx_IDR和GPIOx_ODR),一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。 根据数据手册中列出的每个I/O端口的特定硬件特征,GPIO端口的每个位可以由软件分别配置成多种模式。

输入浮空

输入上拉

输入下拉

模拟输入

开漏输出

推挽式输出

推挽式复用功能

开漏复用功能

每个I/O端口位可以自由编程,然而必须按照32位字访问I/O端口寄存器(不允许半字或字节访问)GPIOx_BSRRGPIOx_BRR寄存器允许对任何GPIO寄存器进行读/更改的独立访问;这样,在读和更改访问之间产生IRQ时不会发生危险。

RCC_APB2PeriphClockCmd()函数是设置外设时钟。ARM与C51单片机不同的是,不用外设的时候,如IO口、ADC、定时器等等,都是禁止时钟的,以达到节能的目的,只有要用到的外设,才开启它的时钟。因此在需要用到GPIOB的时候,我们需要先开启它的时钟。

GPIO配置初始化结构体:GPIO_InitTypeDef

原型: 

STM32F103C8T6学习 之 点亮一个led灯_第2张图片

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;

设置GPIO的输出模式:为普通推挽输出

STM32的四种输出模式:

(1)普通推挽输出(GPIO_Mode_Out_PP)

         使用场合:一般用在0V和3.3V的场合,负责上拉和下拉

         输出电平:推挽输出的低电平是0V,高电平是3.3V

(2)普通开漏输出(GPIO_Mode_Out_OD)

         使用场合:一般用在电平不匹配的场合,如需要输出5V的高电平

(3)复用推挽输出(GPIO_Mode_AF_PP):用作串口的输出

(4)复用开漏输出(GPIO_Mode_AF_OD):用在IIC设备

   所有的开漏输出都需要接上拉电阻

GPIO_WriteBit()原型:

STM32F103C8T6学习 之 点亮一个led灯_第3张图片

 

 

你可能感兴趣的:(单片机,STM32)