• STM32学习篇-跑马灯


    一、工作目录
    USER:组USER中一般有main.c、stm32f10x_it.c、system_stm32f10x.c,主要用来编写main函数,存放的主要是用户代码,stm32f10x_it.c中主要用来定义部分中断服务函数,
    System_stm32f10x.c主要定义SystemInit等时钟初始化函数

    HARDWARE:下面存放的是每个实验的外设驱动代码,他的实现是通过调用FWLib,下面的固件库文件实现的,比如led.c 里面调用stm32f10x_gpio.c 里面的函数对led 进行初始化,
    这里面的函数是讲解的重点。后面的实验中可以看到会引入多个源文件。

    SYSTEM:组SYSTEM 是ALIENTEK 提供的共用代码,包含Systick 延时函数,IO 口位带操作以及串口相关函数
    ④CORE:组CORE 下面存放的是固件库必须的核心文件和启动文件。这里面的文件用户不需要修改

    FWLib:组FWLib 下面存放的是ST 官方提供的外设驱动固件库文件,这些文件大家可以根据工程需要来添加和删除。每个stm32f10x_ppp.c 源文件对应一个stm32f10x_ppp.h 头文件。

    README:README 分组主要就是添加了README.TXT 说明文件,对实验操作进行相关说明。
    组之间的层次结构:

    二、STM32的IO口
    8种模式:
    1、输入浮空
    2、输入上拉
    3、输入下拉
    4、模拟输入
    5、开漏输出
    6、推挽输出
    7、推挽式复用功能
    8、开漏复用功能

    烧录程序的配置(使用ST-Link)

    代码思路:先定义led灯的初始化函数,初始化IO口,设置IO口的输出输入模式,在main函数中调用初始化和延时函数,并设置灯的状态(1:亮,0:灭)
    HARDWARE:
    led.c:

    #include "led.h"
    
    void LED_Init(void)
    {
    	GPIO_InitTypeDef  GPIO_InitStructure;
    
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE, ENABLE);	 //使能PD,PE端口时钟
    
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;				 //LED0-->PB.6 端口配置
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽输出,控制高低电平
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //IO口速度为50MHz
    	GPIO_Init(GPIOD, &GPIO_InitStructure);					 //根据设定参数初始化GPIOD.6
    	GPIO_SetBits(GPIOD,GPIO_Pin_6);						 //PB.6 输出高
    
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;	    		 //LED1-->PE.6 端口配置,推挽输出
    	GPIO_Init(GPIOE, &GPIO_InitStructure);	  				 //推挽输出,io速度为50MHz
    	GPIO_SetBits(GPIOE,GPIO_Pin_6); 						 //PE.6 输出高
    }
    

    led.h:

    #ifndef __LED_H
    #define	__LED_H
    #include "sys.h"
    
    
    
    // LED端口定义
    #define LED0 PDout(6)// PD6
    #define LED1 PEout(6)// PE6	
    
    void LED_Init(void);
    
    #endif
    

    main.c:

    #include "sys.h"
    #include "delay.h"
    #include "usart.h"
    #include "led.h"
    
    int main(void)
    {
    	delay_init();		//延时函数初始化
    	LED_Init();	//初始化与LED连接的硬件接口
    	while(1)
    	{
    		LED0 = 0;
    		LED1 = 1;
    		delay_ms(1000);		//延时1s
    		LED0 = 1;
    		LED1 = 0;
    		delay_ms(1000);		//延时1s
    	}
    }
    
  • 相关阅读:
    quartz_jobs.xml的问题
    Enum.GetHashCode()的问题
    记录并分享一下安卓通讯录导入到IPhone
    js本地图片预览
    统计一下ie的一些问题(什么时候遇到什么时候更新)
    【转载】App.config/Web.config 中特殊字符的处理
    信息系统项目管理师备考笔记——项目生命周期和组织
    win10安装.net3.5
    结售汇与外汇买卖区别
    [z]数据库迁移
  • 原文地址:https://www.cnblogs.com/flypig666/p/12671518.html
Copyright © 2020-2023  润新知