stm32开发板怎么用按键控制流水灯

 我来答
运动一圈
2016-07-05 · TA获得超过949个赞
知道大有可为答主
回答量:964
采纳率:92%
帮助的人:476万
展开全部
开发板上4个LED是接到STM32的4个IO口上的,要点亮LED,只要在这4个IO上输出对应的高电平

那如何让STM32在PF6~PF9这4个IO上输出高点平呢
首先要看下《STM32F10xxx参考手册CD00171190.pdf》里关于IO端口的介绍,第8章 通用和复用功能I/O(GPIO和AFIO)

百为STM3210E-EVAL开发板上的CPU是STM32F103ZET6,有GPIOA~GPIOG七组IO,每组IO有16个引脚GPIO_Pin_0~GPIO_Pin_15,如板上的PF0~PF15

其中每个IO端口有2个32位的寄存器(GPIOx_CRL和GPIOx_CRH)配置,每个引脚由其中4位进行配置,
4位字段是由一个两位的配置字段和一个两位的模式字段组成

要设置这4位,要看下GPIOx_CRL,GPIOx_CRH的寄存器定义

由上图可以看出GPIOF_CRL的31~28位是设置PF7的,GPIOF_CRL的27~24位是设置PF6的
GPIOF_CRH的3~0位是设置PF8的,GPIOF_CRH的7~4位是设置PF6的

这里我们把每个引脚设置为
CNF[1:0] = 00:通用推挽输出模式
MODE[1:0] = 11 : 输出模式,最大速度50MH

GPIOF_CRL,GPIOF_CRH的寄存器地址分别是0x40011C00,0x40011C04
这个寄存器是怎么得来的,STM32数据手册里并没有直接给出,在《一个内幕者对STM32的介绍》4.1.1 寄存器地址查阅 这里有介绍怎么通过上面的偏移地址算出。

配置好,我们就可以直接在端口输出数据寄存器GPIOF_ODR输出高电平控制LED了,GPIOF_ODR有16位,每个位对应GPF的一个引脚,PF0~PF15

下面就可以编写LED流水灯程序了,激动啊,等了好久终于等到今天

/* main.c */
#define GPIOF_CRL (*(volatile unsigned int *)0x40011C00) //端口配置低寄存器
#define GPIOF_CRH (*(volatile unsigned int *)0x40011C04) //端口配置高寄存器
#define GPIOF_ODR (*(volatile unsigned int *)0x40011C0C) //端口输出数据寄存器
#define RCC_APB2ENR (*(volatile unsigned int *)0x40021018) //

void delay(void)
{
unsigned int i;
for(i=0;i<500000;i++);
}
int main()
{
int i;
RCC_APB2ENR |= 1<<7; //打开GPIOF的时钟
GPIOF_CRL = ( GPIOF_CRL & 0x00ffffff ) | 0x33000000; //配置PF6,PF7为通用推挽输出模式,最大速度50MH
GPIOF_CRH = ( GPIOF_CRH & 0xffffff00 ) | 0x00000033; //配置PF8,PF9为通用推挽输出模式,最大速度50MH

while(1)
{
for(i=6;i<=9;i++)
{
GPIOF_ODR = ( GPIOF_ODR & 0xfffffc3f ) | ( 1<<i ); //在PF6~PF9引脚轮流输出高电平
delay();
}
}
}
宿兴电子
2024-10-18 广告
联系我们一、有无震荡源 无源这里的“源”不是指电源,而是指震荡源。也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。 二、价格不同 有源蜂鸣器往比无源蜂鸣器贵,就是因为里面多个震荡... 点击进入详情页
本回答由宿兴电子提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式