历史上的今天
今天是: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);
}
}
上一篇:STM32 GPIO模式总结
史海拾趣
|
各位大侠是否也搞过在线系统升级没有?比如在做个软件运行,如果发现u盘或sd卡里面有nk的同名文件,就提示可以系统升级,然后直接升级~我看到英贝德的某个产品也能实现这样的操作。我现在还不是很明白如果以上方案可行,到底是不是把新的nk镜像直接 ...… 查看全部问答> |
|
大家好,用立宇泰的摄像头应用程序和驱动程序平台是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 ...… 查看全部问答> |
|
求购一块TI的EK-LM3S8962,要求带小板,我主要是拿回来学习CAN总线,希望已经将这块板子放在角落里的朋友能转给我学习一下。 不过喊天价吓唬我的就算了,我胆子小,呵呵 我这里还有C2000开发套件,和几块PIC的板子,如果感兴趣,交换也行 C2000&nb ...… 查看全部问答> |
|
布线(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管同步起来,很着急的求解 ...… 查看全部问答> |




