历史上的今天
返回首页

历史上的今天

今天是:2025年01月30日(星期四)

2019年01月30日 | stm32-点亮led,流水灯

2019-01-30 来源:eefocus

主要使用的是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);

}

 }


推荐阅读

史海拾趣

Graseby Infrared公司的发展小趣事
确保电路中的互锁机构工作正常,防止两个接触器同时吸合导致短路事故。
Applied Micro Circuits (MACOM)公司的发展小趣事

Applied Micro Circuits(MACOM)公司的历史可以追溯到其创立之初。MACOM最初名为Microwave Associates,成立于上世纪某个时期,以磁控管作为首创产品,主要应用于微波雷达领域。随着技术的不断进步,公司逐步扩展产品线,推出了包括真空管、高功率PIN二极管/晶体管和移相器等一系列产品。然而,上世纪九十年代,由于经营不善,MACOM被AMP公司收购,随后又经过多次转手,最终成为Tyco旗下的一部分。

Harvatek Corporation公司的发展小趣事

背景:随着电子技术的飞速发展,Hantronix始终站在技术创新的前沿。公司不断投入研发资源,致力于开发具有自主知识产权的新产品和技术。

发展:Hantronix成功推出了一系列创新产品,如液晶显示器、图形模块、触摸屏等,这些产品不仅性能卓越,而且设计独特,满足了市场多样化的需求。同时,公司还积极申请专利保护,确保其技术成果得到法律的有效保障。

EDDING公司的发展小趣事

随着Eclipse的不断发展壮大,ECLIPSE公司也面临着越来越多的挑战和风险。其中最大的挑战之一是保持Eclipse的开放性和灵活性,同时确保其稳定性和安全性。为此,ECLIPSE公司采取了一系列措施,包括加强代码审核、引入安全漏洞奖励计划等。此外,公司还积极应对来自竞争对手的挑战和市场变化,不断调整和优化自身的战略和业务模式。

DATEL Inc公司的发展小趣事

随着技术的不断进步,DATEL Inc.的数据采集产品逐渐在军事领域找到了用武之地。公司接到一项为军方开发高精度数据采集系统的订单。经过深入研究和反复测试,DATEL Inc.成功交付了一套满足军方严苛要求的数据采集系统,为军方提供了准确、可靠的数据支持。这一突破不仅为DATEL Inc.赢得了军方的高度认可,也进一步扩大了公司在军事领域的影响力。

Dexter Research Center Inc公司的发展小趣事

随着业务的不断发展,Dexter开始积极拓展市场。公司首先将目光投向了国内市场,通过深入了解客户需求,提供定制化的解决方案,成功占领了国内市场的一定份额。随后,Dexter又将目光转向了国际市场。通过参加国际展会、拓展海外销售渠道等方式,Dexter成功打入了欧美、亚洲等多个国家和地区的市场。全球化战略为Dexter带来了更广阔的发展空间和市场机遇。

问答坊 | AI 解惑

我要转行了

我在这里干电子工程师一个月开的太少了,想要去转销售。大家说能行不,说是转销售了,但是我在干销售时不会放下我的电子专业,到时买楼买车之后在转回来。不知道能不能在转回电子工程师了。想听听大家的见意。…

查看全部问答>

大家讨论下如何系统升级的问题

各位大侠是否也搞过在线系统升级没有?比如在做个软件运行,如果发现u盘或sd卡里面有nk的同名文件,就提示可以系统升级,然后直接升级~我看到英贝德的某个产品也能实现这样的操作。我现在还不是很明白如果以上方案可行,到底是不是把新的nk镜像直接 ...…

查看全部问答>

谁有基于单片机数字电流表的课程设计?

谢谢,不是电压表,是电流表,网站上面都找不到,尽是电压表的。…

查看全部问答>

2440+WINCE5.0摄像头拍第四张照时出现异常

大家好,用立宇泰的摄像头应用程序和驱动程序平台是WINCE5。0,在拍照时拍到第四张时出现异常,DNW窗口出现这样的信息 RaiseException: Thread=839e05e8 Proc=81c76ac0 \'Cameratest.exe\' AKY=00000401 PC=03fb44d8(coredll.dll+0x000444d8) RA= ...…

查看全部问答>

vc2005智能设备的CButton与vc2005非智能设备的Cbutton的主要区别在哪儿?高手指点

vc2005智能设备的CButton与vc2005非智能设备的Cbutton的主要区别在哪儿?高手指点…

查看全部问答>

帮忙解决vhdl:quartus7.2 在运行if..genarate遇到的问题

本人在quartus7.2运行如下vhdl代码: library ieee; use ieee.std_logic_1164.all; entity shift is         generic (len:integer);   port(a,clk:in std_logic;          &n ...…

查看全部问答>

想求购一块EK-LM3S8962的开发板

求购一块TI的EK-LM3S8962,要求带小板,我主要是拿回来学习CAN总线,希望已经将这块板子放在角落里的朋友能转给我学习一下。 不过喊天价吓唬我的就算了,我胆子小,呵呵 我这里还有C2000开发套件,和几块PIC的板子,如果感兴趣,交换也行 C2000&nb ...…

查看全部问答>

PCB Layout 中的直角走线、差分走线和蛇形线

        布线(Layout)是PCB设计工程师最基本的工作技能之一。走线的好坏将直接影响到整个系统的性能,大多数高速的设计理论也要最终经过 Layout 得以实现并验证,由此可见,布线在高速 PCB 设计中是至关重 ...…

查看全部问答>

PAD中邦定IC的画法及注意事项Bonding PCB Layout注意事項

PADS中邦定IC的画法及注意事项Bonding PCB Layout注意事項  QQ: 520122524Skype:xcq185388740msn: xcq185388740@live.cn邮箱:xcq185388740@163.com…

查看全部问答>

怎么样用单片机控制信号发生器

我想用单片机的USB口和信号发生器的USB口接起来,然后通过单片机程序来控制信号发生器发生正弦信号(频率和复制用程序设定),这样可以的吗?因为我在控制信号发生器的时候还得用单片机来控制其他的MOS管,信号的频率和MOS管同步起来,很着急的求解 ...…

查看全部问答>