STM32_入门程序LED

发布者:cloudsousou6最新更新时间:2018-12-11 来源: eefocus关键字:STM32  入门程序  LED 手机看文章 扫描二维码
随时随地手机看文章

***********************************************************************************************************************************************************


开发板   :奋斗STM32


cpu         :STM32F103


开发环境:keil uVsion4


*************************************************************************************************************************************************************


前言:搞了两天,终于把开发环境搭建好了,以及编写了32的第一个入门程序,我们知道玩一个单片机开发板,做的第一件事就是点亮LED灯,因为之前玩过arm开发板,所以学习STM32也是按照这个思路进行的!因为网上有大量的参考资料感觉学习过程还是蛮顺利的!学习32有库开发和寄存器开发,因为库开发比较高效,所以


接下来的STM32学习之路都是按照库开发模式进行学习!


前期准备:


    1.  MDK安装(mkd453)


    2.J-LINK下载安装(Setup_JLinkARM_V410i.exe)


    3.J-LINK线 或 串口线(下载程序到开发板)


一.新建工程


(1)点击project->NEW uVision Project新建工程文件,文件名字任意取,将文件保存在我们自己设定的路径下。


(2)接下来的窗口是选择公司和芯片型号,我用的是ST公司的STM32F103VE,所以选择STM32F103VE,再点击OK。


 ( 3 ) 接下来问是否启动代码到工程文件,这里我是用的ST的库,则点击“否” (一般情况都是点击“否”)。


(4)此时工程创建成功,但是我们的工程没有任何文件接下来手动添加所需文件。


(5)将官方STM32官方库拷到我们设定的路径下的文件夹新建5个文件夹,USER,FWlib,CMSIS,Output,Listing


     *FWlib放\Libraries\STM32F10x_StdPeriph_Driver文件夹下的inc和src文件夹


     *USER放main.c stm32f10x_conf.h,stm32f10x_it.h和stm32f10x_it.c


     *CMSIS放\Libraries\CMSIS\CM3下的全部文件夹,


(6)回到工程中。在Target下选择ADD Group新建STARTCODE, USER, FElib, CMSIS,里面要放的的代码如图所示:


   


(7)设置参数output,Listing,c/c++,Debug,Utilities


 ( 8 )  Jlink下载设置


二,编写main.c


#include "stm32f10x.h"

 

GPIO_InitTypeDef GPIO_InitStructure;

#define LED2_ON GPIO_SetBits(GPIOD,GPIO_Pin_3) 

#define LED2_OFF GPIO_ResetBits(GPIOD,GPIO_Pin_3)

 

void RCC_Configuration(void);

void LED_Config(void);

void Delay(__IO uint32_t nCount);

 

void LED_Config(void)

{

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB |RCC_APB2Periph_GPIOD,ENABLE);

    GPIO_InitStructure.GPIO_Pin= GPIO_Pin_3;

    GPIO_InitStructure.GPIO_Mode= GPIO_Mode_Out_PP; 

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_Init(GPIOD,&GPIO_InitStructure);  

}

 

int main(void)

{

    RCC_Configuration();

  LED_Config();

  while(1)

{   

                     LED2_ON;

            Delay(0xAFFFF);

             LED2_OFF;

            Delay(0xAFFFF);

  

                }

}

 

void Delay(__IO uint32_t ncount)

{

     for(;ncount != 0;ncount--);

}

 

void RCC_Configuration(void)

{

     SystemInit();

}


三.主程序编译连接调试


四.使用J-link下载到开发板上运行


点击“LOAD”


  

发现开发板上的LED灯成功闪烁。。。


五.main.c编程分析


首先我们我们想编程实现点亮LED,分为这么几步:


1.初始化结构体—GPIO_InitTypeDef类型


typedef struct

{

  uint16_t GPIO_Pin;             /*!< Specifies the GPIO pins to be configured.

                                      This parameter can be any value of @ref GPIO_pins_define */

 

  GPIOSpeed_TypeDef GPIO_Speed;  /*!< Specifies the speed for the selected pins.

                                      This parameter can be a value of @ref GPIOSpeed_TypeDef */

 

  GPIOMode_TypeDef GPIO_Mode;    /*!< Specifies the operating mode for the selected pins.

                                      This parameter can be a value of @ref GPIOMode_TypeDef */

}GPIO_InitTypeDef;

2.初始化库函数—GPIO_Init()


void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)

{

  uint32_t currentmode = 0x00, currentpin = 0x00, pinpos = 0x00, pos = 0x00;

  uint32_t tmpreg = 0x00, pinmask = 0x00;

  /* Check the parameters */

  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));

  assert_param(IS_GPIO_MODE(GPIO_InitStruct->GPIO_Mode));

  assert_param(IS_GPIO_PIN(GPIO_InitStruct->GPIO_Pin));  

  

/*---------------------------- GPIO Mode Configuration -----------------------*/

  currentmode = ((uint32_t)GPIO_InitStruct->GPIO_Mode) & ((uint32_t)0x0F);

  if ((((uint32_t)GPIO_InitStruct->GPIO_Mode) & ((uint32_t)0x10)) != 0x00)

  { 

    /* Check the parameters */

    assert_param(IS_GPIO_SPEED(GPIO_InitStruct->GPIO_Speed));

    /* Output mode */

    currentmode |= (uint32_t)GPIO_InitStruct->GPIO_Speed;

  }

     ......

}


3.开启外设时钟

  

GPIO所使用的时钟PCLK2采用默认值,为72MHz,为了使能GPIOD引脚,通常我们是调用RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE)函数,如果想同时使能其他gpio引脚,就改函数的参数为相应的引脚。


void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)

{

  /* Check the parameters */

  assert_param(IS_RCC_APB2_PERIPH(RCC_APB2Periph));

  assert_param(IS_FUNCTIONAL_STATE(NewState));

  if (NewState != DISABLE)

  {

    RCC->APB2ENR |= RCC_APB2Periph;

  }

  else

  {

    RCC->APB2ENR &= ~RCC_APB2Periph;

  }

}

**************************************************************************************************************************************************


说明:开启外设时钟之前首先要配置好系统时钟SYSCLK,为配置好SYSCLK,要设置一系列的时钟来源,倍频,分频等控制参数,这些工作由SystemInit()库函数完成。当芯片被复位(包括上电复位)时,将开始运行startup_stm32f10x_hd.s汇编代码,这个汇编代码先是调用SystemInit(),在进入C语言中的“__main”函数执行,这是一个C标准库的初始化函数,执行这个函数之后最终跳转到用户文件中的“main”函数接口,开始运行主程序。


***************************************************************************************************************************************************


4.控制I/O输出高,低电平


(1)调用GPIO_SetBits()函数控制输出高电平。


void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

{

  /* Check the parameters */

  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));

  assert_param(IS_GPIO_PIN(GPIO_Pin));

  

  GPIOx->BSRR = GPIO_Pin;

}

(2)调用GPIO_ResetBits()函数控制输出低电平。


void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

{

  /* Check the parameters */

  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));

  assert_param(IS_GPIO_PIN(GPIO_Pin));

  

  GPIOx->BRR = GPIO_Pin;

}

5.填充GPIO_InitTypeDef结构体


GPIO_InitStructure.GPIO_Pin= GPIO_Pin_3;

GPIO_InitStructure.GPIO_Mode= GPIO_Mode_Out_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;


当然这要参考stm32开发板原理图:


根据这个原理图我们就可以改LED_Config(void),GPIO_SetBits(),GPIO_ResetBits()三个函数的配置!然后就可以点亮三个led灯了


关键字:STM32  入门程序  LED 引用地址:STM32_入门程序LED

上一篇:STM32中的assert_param函数浅析
下一篇:stm32 bootloader更新固件重启 IWDG独立看门狗

推荐阅读最新更新时间:2024-03-16 16:19

基于STM32的PCL6045B开发体会
简介:上两个月做了个关于尿残渣的新项目,用到了电机驱动芯片PCL6045BL。这个系统方案有一个20余年工作经验的老工程师提出来,主要采用的是STM32操作PCL6045,进而控制多轴电机运动。 于是公司从每个不同项目组抽选人员组成了一个团队。本人负责软件部分,负责编写驱动程序和调试电路板。 全新项目,有一定挑战性。经过分析,决定采用STM32总线方式(FSMC)驱动PCL6045B。对比FSMC的四种总线操作时序和PCL6045B操作时序。认为应该选用STM32的PCCARD模式操作。从数据库中查找了一些文献资料,就开干起来了。 两名硬件工程师按我的需求设计好硬件电路板。 接下来分成以下几个步骤进行: 首先就是建
[单片机]
传统照明企业销售大增齐向LED扩展
  回顾过去一年,国际金融危机持续影响,欧洲国家主权债务危机频发,国际经济回暖仍充满不确定性;人民币汇率不断升值,国内通货膨涨压力增大,原材料和人工成本持续上涨;国内外照明行业日趋激烈的竞争。目前国内照明行业竞争日趋激烈,企业的营业费用大幅上升,行业平均利润率逐渐趋薄。但是,从照明行业有关上市公司发布的2010年报可以看到,随着我国经济社会的进步,居民生活水平的提高,国家政策的支持,照明行业的发展蕴含着巨大的潜力,未来的经营和盈利能力具有广阔的空间和稳定性。   阳光照明超计划实现了2010 年年度计划目标。全年实现营业收入 21.7亿元,完成计划目标的 102.04%,增长24.52%;实现净利润 1.8亿元,完成计划目标的
[电源管理]
STM32 定时器输出 PWM
我们通过TIM3 输出PWM 去驱动 SG90电机 配置如下 1.GPIO结构体 2.配置通用定时器结构体 3.配置定时去输出PWM结构体 4.打开时钟 — GPIO时钟,TIM定时器时钟,部分重映射时钟 5.配置PWM比较值 一 我们使用定时器3 通道2 重映射之后为PB5 GPIO_InitTypeDef GPIO_motorstruct; GPIO_motorstruct.GPIO_Mode =GPIO_Mode_AF_PP; GPIO_motorstruct.GPIO_Pin = GPIO_Pin_5; GPIO_motorstruct.GPIO_Speed =GPIO_Speed_50M
[单片机]
8051单片机(STC89C52)八个LED灯闪烁
#include STC89C5xRC.h void delay() { int i,j; for(i=0;i 200;i++) for(j=0;j =200;j++) { ; } } int main() { while(1) { P2 = 0xff;//八灯灭 delay(); P2 = 0;//八灯亮 delay(); } }
[单片机]
OFweek:细看国内LED芯片扩产计划的调整
概述: 随着国内对 MOCVD 设备的巨额补贴将在本月告一段落,同时 LED 整体终端市场表现不如预期与LED磊晶价格大幅下降等因素的影响,预期今年下半年国内上游 LED芯片 厂商扩产计划将会出现大幅度修正。 OFweek点评: 国内LED芯片厂商在去年大幅度的扩充产能,是出于对市场前景的看好以及地方政府对MOCVD设备的巨额补贴,可以说市场前景以及政府的补贴成为了这一轮扩产热潮的主要推力。在OFweek看来,出现当前的情况是可以预料的,毕竟当前的市场需求不足以支撑如此庞大的产能扩充。 就在去年国内企业相继大量上马MOCVD之际,业内关于LED产能过剩的讨论就甚嚣尘上。然而,出现了一个超乎市场预期效果
[电源管理]
整理STM32GPIO输出速率问题
GPIO 引脚输出速度有:GPIO_Speed_2MHz (10MHz, 50MHz) 官方一点的解释: GPIO口的驱动电路响应速度,不是输出信号的速度。输出信号的速度与程序有关,通过选择速度来选择不同的驱动电路,降低功耗控制噪声。 又称输出驱动电路的响应速度:(芯片内部在I/O口的输出部分安排了多个响应速度不同的输出驱动电路,用户可以根据自己的需要选择合适的驱动电路,通过选择速度来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。) 可理解为: 输出驱动电路的带宽:即一个驱动电路可以不失真地通过信号的最大频率。 (如果一个信号的频率超过了驱动电路的响应速度,就有可能信号失真。失真因素?) 如果
[单片机]
如何互换STM32中UART的Rx和Tx引脚及电平的反转
今天给大家分享关于STM32关于UART的一些新特性,主要针对较新系列STM32(如:STM32H7、G0、G4等)的UART,可通过软件改变Rx和Tx引脚、电平反转、高低反序、介绍超时等。 支持RXD和TXD管脚互换 有些时候,我们在外接RS232芯片时,可能会将RXD和TXD两根线接反。这类低级错误,一般是老司机才会犯。 如果大家知道USART的TXD和RXD管脚可以互换,那么在连接外设RS232芯片时,如果发生错误,就不必再修改硬件,只需直接在软件中将RXD和TXD的管脚反转过来即可修正错误。 参考上图,设置SWAP位,即可将RXD和TXD管脚互换。 支持接收和发送的电平极性反转 第二个新特性:Tx和Rx电平极
[单片机]
如何互换<font color='red'>STM32</font>中UART的Rx和Tx引脚及电平的反转
深度解析STM32驱动LCD原理
TFTLCD即薄膜晶体管液晶显示器。它与无源TN-LCD、STN-LCD的简单矩阵不同,它在液晶显示屏的每一个像素上都设置有一个薄膜晶体管(TFT),可有效地克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关,因此大大提高了图像质量。 01驱动流程 使用FSMC驱动LCD 关于FSMC,把数据写入相应的地址,FSMC就会把地址从FSMC_A出去,写入的数据会会从FSMC_D发出去。至于片选等信号线都是自动的。读的话,直接读相应的地址,就会拿到改地址上的数据。 FSMC驱动外部SRAM时,外部SRAM的控制一般有: 地址线(如A0~A25) 数据线(如D0~D15) 写信号(WE,即WR) 读信号(OE,即RD) 片选信号
[单片机]
深度解析<font color='red'>STM32</font>驱动LCD原理
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved