完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
GPIOE 第5脚接LED负极通过限流电阻到3.3V
程序如下。只配置了RCC 和输出模式,灯竟然亮了。为什么呢?并没有给IO口RESET呀! #include "STM32f10x.h" int main() { RCC->APB2ENR|=1<<6; //RCC_APB2ENR_GPIOE GPIOE->CRL|=(1<<20); // GPIOE_CEL 10MHZ PUSH-PULL OUTPUT while(1); } 并且试了一下,上面两条程序少一条都不能点亮。这是为什么呢?请高人指点一下。 |
|
相关推荐
7个回答
|
|
|
你这个现象跟相关寄存器的复位值有关系 首先是你的现有代码: 1 RCC->APB2ENR|=1<<6; //RCC_APB2ENR_GPIOE 2 GPIOE->CRL|=(1<<20); // GPIOE_CEL 10MHZ PUSH-PULL OUTPUT 第一行打开时钟,第二行是将GPIOE->CRL寄存器的第二十位置为1,我们看一下GPIOE->CRL寄存器的内容,如下图:
关键来了,GPIOE->CRL寄存器的复位值为0x44444444,意思就是在默认情况下GPIOE->CRL的第23位为0,第22位为1,第21位为0,第20位为0. 然后你的第二行代码又将第20位置为1,这是查看寄存器下方的说明可以知道,你当然已经将该IO口配置为通用开漏输出模式,并且输出频率为最大速度10MHz。 然后是数据输出寄存器GPIOE-ODR 通过文档可知这个寄存器的默认值为0x00000000,也就是默认输出低电平,在结合你目前的电路,小灯自然就会亮了~~~
最佳答案
|
|
|
|
|
|
这个不用先上操作系统么?系统启动起来以后才可运行相关程序啊?如果是51芯片是不是要先编译成对应的芯片能识别的.hex文件啊?
|
|
|
|
|
|
有上拉吧
|
|
|
|
|
|
明白了,但是还有一事不明我按野火的寄存器点亮LED灯视频写如下代码LED死活不亮,请指点一下,错在哪里了
int main(void) { *(unsigned int*)0x40010C00|=3<<20; //GPIOB_CRL *(unsigned int*)0x40021018|=((1)<<3); //RCC_APB2ENR_GPIOB while(1); } |
|
|
|
|
wangyanming101 发表于 2017-3-20 20:01 竟然两条代码 颠倒顺序就可以点亮,
|
|
|
|
|
|
|
|
|
|
|
|
学习中!刚开始学习!
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
STM32F405驱动DS1302时钟模块,输出时间错乱该怎么排查?
2810 浏览 2 评论
stm32f405rgt6驱动DS1302ZN出现时间错乱问题
2420 浏览 1 评论
stm32用fsmc读取ad7606采集数据,数据不变,只有开发版复位才更新数据
2288 浏览 0 评论
2404 浏览 1 评论
1643 浏览 1 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 20:35 , Processed in 0.813817 second(s), Total 89, Slave 69 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2779