OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2335|回复: 6

函数的选择

[复制链接]

55

主题

151

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
304
金钱
304
注册时间
2018-3-12
在线时间
53 小时
发表于 2018-3-26 14:48:01 | 显示全部楼层 |阅读模式
1金钱
#include "stm32f10x.h"     //跑马灯例程

void Delay(u32 count)      //延时函数
{
u32 i=0;
for(;i<count;i++);
}


int main(void)               
{                        
GPIO_InitTypeDef   GPIO_InitStructure;           //结构体变量定义

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE);        //B与E口使能
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;    //LED0-->PB.5
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //
GPIO_Init(GPIOB, &GPIO_InitStructure); //
GPIO_SetBits(GPIOB,GPIO_Pin_5); //
       
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED1-->PE.5
GPIO_Init(GPIOE, &GPIO_InitStructure); //
GPIO_SetBits(GPIOE,GPIO_Pin_5); //
       
while(1)
{
GPIO_ResetBits(GPIOB,GPIO_Pin_5);
GPIO_SetBits(GPIOE,GPIO_Pin_5);
Delay(3000000);
GPIO_SetBits(GPIOB,GPIO_Pin_5);
GPIO_ResetBits(GPIOE,GPIO_Pin_5);
Delay(3000000);
}
}




请问RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE);        //B与E口使能
这是同时使能B与E口时钟,而
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;    //LED0-->PB.5
却是操作的PB.5
问题1:为什么不是操作的PE.5?理由是什么。
问题2:请问32单片机在编写程序,也即调用函数的时候,本质上我理解为操作寄存器,一般的流程是什么?
比如51单片机框架流程是:先对某个口的寄存器进行配置,然后再处理数据。


最佳答案

查看完整内容[请看2#楼]

问题1: RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE); //B与E口使能 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;    //LED0-->PB.5 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // GPIO_Init(GPIOB, &GPIO_InitStructure); // 上边才是完整地操作PB5。 问题2:流程上都是先对寄存器配置,然后再处理;不过32 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

23

主题

323

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1010
金钱
1010
注册时间
2016-11-8
在线时间
233 小时
发表于 2018-3-26 14:48:02 | 显示全部楼层
问题1:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE);        //B与E口使能
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;    //LED0-->PB.5
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //
GPIO_Init(GPIOB, &GPIO_InitStructure); //

上边才是完整地操作PB5。

问题2:流程上都是先对寄存器配置,然后再处理;不过32提供了标准外设库,对寄存器的配置可以通过上面的代码进行,更加简单了。
亦余心之所善,
虽九死其犹未悔。
回复

使用道具 举报

94

主题

369

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2016-8-25
在线时间
485 小时
发表于 2018-3-26 15:11:06 | 显示全部楼层
楼主,要是仔细看看原子哥的视频,这些都不是问题的
回复

使用道具 举报

55

主题

151

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
304
金钱
304
注册时间
2018-3-12
在线时间
53 小时
 楼主| 发表于 2018-3-26 15:32:30 | 显示全部楼层
学习stm32f4 发表于 2018-3-26 15:11
楼主,要是仔细看看原子哥的视频,这些都不是问题的

那里有视屏呀?我就只有一个开发指南,闭门造车在
回复

使用道具 举报

22

主题

87

帖子

0

精华

高级会员

Rank: 4

积分
807
金钱
807
注册时间
2016-5-16
在线时间
118 小时
发表于 2018-3-26 15:33:35 | 显示全部楼层
团战可以不可以输,TM也必须死
回复

使用道具 举报

1

主题

882

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3071
金钱
3071
注册时间
2018-2-7
在线时间
285 小时
发表于 2018-3-26 16:18:17 | 显示全部楼层
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;    //LED0-->PB.5
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //
GPIO_Init(GPIOB, &GPIO_InitStructure);
这个设置的是PB5

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED1-->PE.5
GPIO_Init(GPIOE, &GPIO_InitStructure); //
GPIO_SetBits(GPIOE,GPIO_Pin_5);
这个设置的是PE5

看代码要一行一行仔细看,慢慢分析。
回复

使用道具 举报

94

主题

369

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2016-8-25
在线时间
485 小时
发表于 2018-3-26 16:35:51 | 显示全部楼层
蓝野先生 发表于 2018-3-26 15:32
那里有视屏呀?我就只有一个开发指南,闭门造车在

我也在闭门造车。好好做笔记。视频看百遍,不如笔记认真记一遍。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-16 19:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表