STM32学习笔记一:点亮LED灯

01-LED控制实验

学会的知识:

首先对于一个板子,首先获得它的芯片型号,stm32,进而对Keil进行配置

其次选用合适的J-link,并且安装正确的驱动,

J-link安装好驱动之后

请添加图片描述

遇到的问题

连接不上板子,存在J-link驱动,但是没有连接到板子,检查过后发现是因为 板子接错了线

代码解读
int main(void)
{
	LED_Hardware_Init(); //初始化GPIO
	Delay_Init(); //延时函数的初始化

	while(1)
	{
		LED0(1);
		// Delay_ms(500);
		// LED0(0);
		 LED1(1);
		// Delay_ms(500);
		// LED1(0);
		LED2(1);
		// Delay_ms(500);
		// LED2(0);
		LED3(1);
		// Delay_ms(500);
		// LED3(0);
	} 
}

对于 LED_Hardware_Init() 函数的解读,这个函数就是用来初始化GPIO接口,使之能够被调用,上拉

GPIO是通用输入/输出端口的简称,是STM32可控制的引脚。GPIO的引脚与外部硬件设备连接,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。

void LED_Hardware_Init(void)
{    	 
	GPIO_InitTypeDef  GPIO_InitStructure;

	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);	//使能GPIOE时钟

	//GPIOE2,E3,E4,E5初始化设置
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3 
								| GPIO_Pin_4 | GPIO_Pin_5;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;			//普通输出模式
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;			//推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;		//100MHz
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;			//上拉
	GPIO_Init(GPIOE, &GPIO_InitStructure);					//初始化GPIO

}

Delay_Init 函数 延时初始化函数

void Delay_Init(void)
{
    //关闭计时、不触发中断、计数时钟为AHB/8
    SysTick->CTRL = 0x0;
    //微秒级初值
    fam_nus = SystemCoreClock/8000000;
    //毫秒级初值
    fam_nms = fam_nus * 1000;
    //计数器清零
    SysTick->VAL = 0;

/**********************************************************
功  能:微秒级延时
参  数:ctr 微秒倍数、例如 ctr = 1 则 延时1us
返回值:无
**********************************************************/
void Delay_us(uint16_t ctr)
{
    uint32_t tick_flag = 0;
  
    //定时器初值
    SysTick->LOAD = ctr*fam_nus;   
    //计数器清零
    SysTick->VAL = 0;
    //开启定时器
    SysTick->CTRL |= 0x01;
    do
    {
        //获取定时器状态
        tick_flag = SysTick->CTRL;
    }
    //状态判断
    while(!(tick_flag&(1<<16)) && (tick_flag&0x01));
    //关闭计时
    SysTick->CTRL = 0x00;
}

/**********************************************************
功  能:毫秒级延时
参  数:ctr 微秒倍数、例如 ctr = 1 则 延时1ms
返回值:无
**********************************************************/
void Delay_ms(uint16_t ctr)
{
    uint32_t tick_flag = 0;
  
    SysTick->LOAD = ctr * fam_nms;
    SysTick->VAL = 0;
    SysTick->CTRL = 0x01;
    do
    {
        tick_flag = SysTick->CTRL;
    }
    while(!(tick_flag & (1<<16)) && (tick_flag & 0x01));
    SysTick->CTRL = 0x00;
}

/**********************************************************
功  能:延时nms
参  数:ctr 微秒倍数、例如 ctr = 1 则 延时1ms
返回值:无
**********************************************************/
void Delay_xms(uint16_t nms)
{	 		  	  
	uint32_t temp;		   
	SysTick->LOAD=(uint32_t)nms*fam_nms;						//时间加载(SysTick->LOAD为24bit)
	SysTick->VAL =0x00;           						//清空计数器
	SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;  //开始倒数 
	do
	{
		temp=SysTick->CTRL;
	}while((temp&0x01)&&!(temp&(1<<16)));			//等待时间到达   
	SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;  //关闭计数器
	SysTick->VAL =0X00;     		  						//清空计数器	  	  
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值