stm32-点亮led,流水灯

发布者:HarmoniousCharm最新更新时间:2019-01-30 来源: eefocus关键字:stm32  点亮led  流水灯 手机看文章 扫描二维码
随时随地手机看文章

主要使用的是103和407系列的32  


不知不觉转眼大二也过了一半了,总是想说要开始学32,学32,却一直没有正真的系统的去开始学32。到了寒假,有了许多可以自己调配的时间, 学了一个多礼拜,大致学到了定时器,输出pwm左右,也实战了一下。之前没学32之前一直以为用32做东西不算什么本事,以为只是调用调用库,哪有51更加底层,更加清楚。学了之后才发现,果断被打脸了。51虽说经典,但是32确实强大。  用32写程序不只是调用库那么简单,要了解32各个函数成员的意义,每个模式的作用........(当然也可以直接copy例程的一个一个的代码块,可以不理解直接用函数接口,但是不建议这样,因为这样永远不能直接做东西) 。


 其实之所以难上手是因为32内部的中断,定时器,寄存器相较于51多了太多太多,所以为了管理这些东西,会有很多的接口,   很多的定义,很多的设置和模式需要自己去判断...... 想想第一次用j-link烧程序的时候都是历经挫折


 本菜鸟接下来来说一下点亮led和流水灯的一些关键点:1. 32不同于51端口不需要进行任何配置就可以用,32因为功能较51强大很多正是体现在这些东西,32初始化需要调用xxx_gpio.h里


的GPIO_InitTypeDef,这是一个结构体,内部的成员有如图:


可以看到里面3个成员,如果是stm32f407的,这里面的 GPIO_Mode还要细分成几个模式


2.GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct),初始化函数,把配置好的端口通过这个函数送入里面初始化,IO口就初始化好了


一言不合上代码:


 


#include "stm32f10x.h"

 

#define digitalHi(p,i) {p->BSRR=i;} //设置为高电平

#define digitalLo(p,i) {p->BRR=i;} //输出低电平

#define digitalToggle(p,i) {p->ODR ^=i;} //输出反转状态

 

 

void LED_GPIO_Config()

{

/*定义一个GPIO_InitTypeDef类型的结构体*/

GPIO_InitTypeDef GPIO_InitStructure;

 

/*开启GPIOB和GPIOF的外设时钟*/

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); 

/*选择要控制的GPIOB引脚*/    

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;

/*设置引脚模式为通用推挽输出*/

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   

 

/*设置引脚速率为50MHz */   

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 

 

/*调用库函数,初始化GPIOA1*/

GPIO_Init(GPIOA, &GPIO_InitStructure);

 

/*选择要控制的GPIOB引脚*/

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;

 

/*调用库函数,初始化GPIOA2*/

GPIO_Init(GPIOA, &GPIO_InitStructure);

 

/*选择要控制的GPIOB引脚*/

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;

 

/*调用库函数,初始化GPIOA3*/

GPIO_Init(GPIOA, &GPIO_InitStructure);

 

/*关闭3个led*/

GPIO_SetBits(GPIOA, GPIO_Pin_1);

GPIO_SetBits(GPIOA, GPIO_Pin_2);

GPIO_SetBits(GPIOA, GPIO_Pin_3);

}

 

void Delay(__IO uint32_t nCount) //简单的延时函数

{

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

}

int main(void)

{

LED_GPIO_Config();

while(1)

{

GPIO_ResetBits(GPIOA, GPIO_Pin_1);

Delay(0x0FFFFF);

    GPIO_SetBits(GPIOA, GPIO_Pin_1);

GPIO_ResetBits(GPIOA, GPIO_Pin_2);

Delay(0x0FFFFF);

    GPIO_SetBits(GPIOA, GPIO_Pin_2);

GPIO_ResetBits(GPIOA, GPIO_Pin_3);

Delay(0x0FFFFF);

    GPIO_SetBits(GPIOA, GPIO_Pin_3);

}

 }


关键字:stm32  点亮led  流水灯 引用地址:stm32-点亮led,流水灯

上一篇:STM32 GPIO模式总结
下一篇:STM32 定时器输出PWM的模式

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

STM32 USART串口DMA 接收和发送的源码详解
硬件平台:STM32F103ZET6; 开发环境:KEIL 4; 先说说应用通讯模式,串口终端的工作方式和迪文屏差不多,终端被动接受MCU发的指令,终端会偶尔主动发送一些数据给MCU(像迪文屏的触摸信息上传)。 串口DMA发送: 发送数据的流程: 前台程序中有数据要发送,则需要做如下几件事 1.在数据发送缓冲区内放好要发送的数据,说明:此数据缓冲区的首地址必须要在DMA初始化的时候写入到DMA配置中去。 2.将数据缓冲区内要发送的数据字节数赋值给发送DMA通道,(串口发送DMA和串口接收DAM不是同一个DMA通道) 3.开启DMA,一旦开启,则DMA开始发送数据,说明一下:在KEIL调试好的时候,D
[单片机]
stm32 .icf文件.map文件,汇编文件对照
(1) 从汇编语句中可以看出中断向量表的位置处于0x08004000。对应.ICF文件中的 define symbol __ICFEDIT_intvec_start__ = 0x08004000; 补充一点:中断向量表就是2条语句做为一个单元,里面存储的就是中断函数的入口地址。我们平时写的中断函数,就可以在某个中断的入口地址下面看到。 (2) define symbol __ICFEDIT_SYS_FUNC_start__ = 0x08004200; //functab 此部分是在0x08004200后插入一段代码,从矢量表中我们可以看出矢量表的最后的地址是0x0800412e。所以从0x08004200开始插入一
[单片机]
<font color='red'>stm32</font> .icf文件.map文件,汇编文件对照
STM32引脚模式说明
1) 浮空输入(默认状态):GPIO_Mode_IN_FLOATING 引脚自身视为开路,电平由外部电路决定,不能输出; 2) 上拉输入:GPIO_Mode_IPU 与浮空输入类似,但当外部电平不确定时,会被拉至高电平; 3) 下拉输入:GPIO_Mode_IPD 与浮空输入类似,但当外部电平不确定时,会被拉至低电平; 4) 模拟输入:GPIO_Mode_AIN 用作内部AD采样脚; 5) 通用开漏输出:GPIO_Mode_OUT_OD 输出0为低电平,输出1为高阻态,电平由外部电路决定,可以读出引脚状态; 6) 通用推挽输出:GPIO_Mode_OUT_PP 输出0为低电平,输出
[单片机]
STM32 定时器的4通道计数器应用
通用定时器确实比较强悍,功能极多我也比较晕 此为在不牵扯PWM 与 DMA下像C51那样计数点灯。 当然你要配置一些IO口作为点灯用这里就不详细说了。 就如 #defineLED2_ON GPIO_ResetBits(GPIOD,GPIO_Pin_7) #define LED2_OFF GPIO_SetBits(GPIOD,GPIO_Pin_7) 这样的。 然后启用通用定时器2设置它的中断等3.0的库; //Timer2中断*// void NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroup
[单片机]
STM32的看门狗配置详情解说
  stm32有两个看门狗,独立看门狗和窗口看门狗,其实两者的功能是类似的,只是喂狗的限制时间不同。独立看门狗有自己独立的40Khz时钟,不存在使能问题;而窗口看门狗使用的是PCLK1时钟,需要先使能时钟。以下是关于看门狗的具体说明:   ①独立看门狗是限制喂狗时间在0-x内,x由你的相关寄存器决定。喂狗的时间不能过晚。   ②窗口看门狗,所以称之为窗口就是因为其喂狗时间是一个有上下限的范围内,你可以通过设定相关寄存器,设定其上限时间和下限时间。喂狗的时间不能过早也不能过晚。   显而易见的是,独立看门狗比较简单,容易理解。这里,主要对窗口看门狗的详细含义作具体说明。   窗口看门狗介绍:   看门狗的上窗口就是配置寄存器WW
[单片机]
<font color='red'>STM32</font>的看门狗配置详情解说
STM32一键下载电路导致的单片机不能正常运行
使用的正点原子精英版的电路,直接使用那种4线的stlink给单片机供电+下载程序,发现能够正常下载,但死活不运行程序。 一键下载电路如图~ 当时没有使用USB串口功能,所以没有接入5V供电,导致了RTS和DTR引脚悬空,测量电压均为2.69V,即BOOT0被拉高,单片机的启动模式变成了从ISP下载。 插上5V供电一切正常~
[单片机]
<font color='red'>STM32</font>一键下载电路导致的单片机不能正常运行
重返STM32之---RTC使用
STM3f10x的RTC时能涉及到的寄存器有RCC,BKP和RTC这三个大类寄存器;其中RCC主要控制了实时时钟和备份区的电源使能和时钟使能;RTC模块和时钟配置系统的寄存器是在后备区域的(即BKP),通过BKP后备区域来存储RTC配置的数据可以让在系统复位或待机模式下唤醒后RTC里面配置的数据维持不变;为此备份区还得涉及一个寄存器PWR,电源管理寄存器,备份区的写保护位在PWR- CR的第八位。 由于整个RTC都是位于后备区,而且RTC的APB1总线和内核的APB1总线是独立的,所以在系统复位和唤醒时,RTC和BKP的那些时钟不用从新配置;他们只受Backup domain software reset这个位和系统完全掉电的影响。
[单片机]
重返<font color='red'>STM32</font>之---RTC使用
Event Recoder调试组件在stm32上的使用
本文目标:Event_Recoder调试组件在stm32上的使用 按照本文的描述,应该可以在你所处的硬件上跑通代码。 先决条件:装有编译和集成的开发环境,比如:Keil uVision5。 板子硬件要求:无,属于调试功能。 起源 因为做产品开发,设计东西有时候考虑得多,mcu的并没有多余的串口供使用调试,在调试一些初期进行验证时,必要的调试的打印信息是需要的。 Event Recoder调试组件简介 嵌入式的Event_Recoder调试组件是一种可以在MDK开发环境下使用的高级调试工具,它可以记录软件运行的一些标志信息,并以图形化的形式显示出来。它可以帮助你了解和分析内部操作,支持Keil RTX操作系统调试以及MDK自带的
[单片机]
Event Recoder调试组件在<font color='red'>stm32</font>上的使用
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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