STM32f103学习笔记——跑马灯

Stm32f103学习笔记(1)

开发板:正点原子战舰V3
任务:点亮LED
引脚:led0:GPIOB_5,led1:GPIOE_5;

①库函数版本:

程序1 自建led.c库

#include"LED.h"
#include"stm32f10x.h"

void LED_Init(void)
{
     
	 GPIO_InitTypeDef GPIO_InitStructure;
	 
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
     GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; 
	 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
	 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	 GPIO_Init(GPIOE,&GPIO_InitStructure);

	 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);
     GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; 
	 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
	 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	 GPIO_Init(GPIOE,&GPIO_InitStructure);

}

程序2 main函数:

#include"stm32f10x.h"
#include"LED.h"
#include"delay.h"

int main(void)
{
     
delay_init();
LED_Init();
	
	while(1)
	{
     
		GPIO_SetBits(GPIOB,GPIO_Pin_5);
		GPIO_SetBits(GPIOE,GPIO_Pin_5);
		delay_ms(100);
			
		GPIO_ResetBits(GPIOB,GPIO_Pin_5);
		GPIO_ResetBits(GPIOE,GPIO_Pin_5);
		delay_ms(100);
	}
}

用到的库:

stm32f10x_gpio.h
stm32f10x_rcc.h

问题

问题1:

 GPIO_InitTypeDef GPIO_InitStructure;`

为什么Init与TypeDef没有空格隔开

问题2:

     GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; 
	 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
	 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
     GPIO_Init(GPIOE,&GPIO_InitStructure);

为什么GPIO_Init();要放在结构体的后面?

②寄存器版本

程序1 自建LED.c库:
#include"LED.h"
#include"stm32f10x.h"

void LED_Init(void)
{
     
    RCC->APB2ENR |=1<<3;//时钟使能寄存器
	GPIOB->CRL &= 0xFFF0FFFFF;//复位
	GPIOB->CRL |= 0x000300000;//寄存器0011设置为推挽输出,且为50Hz
	GPIOB->ODR |=1<<5;
	
	RCC->APB2ENR |=1<<6;
	GPIOE->CRL &= 0xFFF0FFFFF;
	GPIOE->CRL |= 0x000300000;
	GPIOE->ODR |=1<<5;	
}

程序2 main函数:

#include"stm32f10x.h"
#include"LED.h"
#include"delay.h"

int main(void)
{
     
delay_init();
LED_Init();
	
	while(1)
	{
     
	GPIOB->ODR |=1<<5;
	GPIOE->ODR |=1<<5;	
	delay_ms(100);
	
	GPIOB->ODR =~(1<<5);
	GPIOE->ODR =~(1<<5);
	delay_ms(100);
	}
}

用到的寄存器:

APB2 外设时钟使能寄存器(RCC_APB2ENR)
端口配置低寄存器(GPIOx_CRL)
端口输出数据寄存器(GPIOx_ODR)

问题

问题1:

端口配置低寄存器(GPIOx_CRL)为什么是***0xFFF0 FFFF***,按照十六进制算起来,***0x1111 1111 1111 0000 1111 1111 1111 1111***这样加上GPIOx_CRH,不就64位了,与32位不符和?

注:以上为我个人在学习stm32f1的过程中遇到的问题
参考资料:
《STM32库开发实战指南(第二版)》(书籍)
《STM32中文参考手册》
《正点原子手把手教你学stm32》(视频)
《野火哥带你学stm32》(视频)

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