野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10776|回复: 15

LED4,LED5点不亮啊

[复制链接]
发表于 2016-10-25 12:55:54 | 显示全部楼层 |阅读模式
int main(void)
{

                //配置GPIOB时钟寄存器
                *(unsigned int*)(0x40021000 | 0x18) |=(1 << 3);
                //配置端口低寄存器CRL(GPIOB)
                *(unsigned int*)(0x40010C00 | 0x00) &=~((0x0f) << 4*0);
                *(unsigned int*)(0x40010C00 | 0x00) |=(1 << 4*0);
                //配置端口输出寄存器ODR(GPIOB)
                *(unsigned int*)(0x40010C00 | 0xC0) &=~(1 << 0);
               
                //配置GPIOF时钟寄存器
                *(unsigned int*)(0x40021000 | 0x18) |=(1 << 7);
                //配置端口低寄存器CRL(GPIOF)
                *(unsigned int*)(0x40012000 | 0x00) &=~((0x0f) <<4*7);
                *(unsigned int*)(0x40012000 | 0x00) |=(1 << 4*7);
                //配置端口输出寄存器ODR(GPIOF)
                *(unsigned int*)(0x40012000 | 0xC0) &=~(1 << 7);
               
                //配置GPIOF时钟寄存器
                *(unsigned int*)(0x40021000 | 0x18) |=(1 << 7);
                //配置端口高寄存器CRH(GPIOF)
                *(unsigned int*)(0x40012000 | 0x04) &=~((0x0f) <<4*0);
                *(unsigned int*)(0x40012000 | 0x04) |=(1 << 4*0);
                //配置端口输出寄存器ODR(GPIOF)
                *(unsigned int*)(0x40012000 | 0xC0) &=~(1 << 0);
       
}


回复

使用道具 举报

发表于 2016-10-25 16:41:35 | 显示全部楼层
寄存器的真不想看。。。
回复 支持 反对

使用道具 举报

发表于 2016-10-25 17:04:41 | 显示全部楼层
回去认真看一遍视频,把原理搞懂就可以点亮了。
回复 支持 反对

使用道具 举报

发表于 2016-10-25 17:05:14 | 显示全部楼层
冷千秋 发表于 2016-10-25 16:41
寄存器的真不想看。。。

这是第一课,我在教他们怎么从0开始写程序,怎么看手册写程序,这个基础很有必要。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-25 19:34:32 | 显示全部楼层
还是没找到错在哪里
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-25 20:00:13 | 显示全部楼层
                *(unsigned int*)(0x40012000 | 0x00)        &=~((0x0f) <<4*7);跟着视频来的啊,但是还是点不亮啊,这行和有一个警告@fire
回复 支持 反对

使用道具 举报

发表于 2016-10-25 21:52:01 | 显示全部楼层
白开水与电脑 发表于 2016-10-25 20:00
*(unsigned int*)(0x40012000 | 0x00)        &=~((0x0f)

慢慢看寄存器吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-26 00:13:02 来自手机 | 显示全部楼层
我真的没照出来了吗
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-26 00:13:26 来自手机 | 显示全部楼层
我真的解决不了啊
回复 支持 反对

使用道具 举报

发表于 2016-10-26 07:57:24 | 显示全部楼层
楼主写代码之前,原理要搞清楚。不然调试会自乱阵脚
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-26 08:15:06 来自手机 | 显示全部楼层
能告诉我我那里错了吗
回复 支持 反对

使用道具 举报

发表于 2016-10-26 09:17:38 | 显示全部楼层
原因是GPIOF端口的基地址写错了,这个不能怪楼主,要怪就怪ST的中文参考手册翻译错了,英文版本是正确的,这个我在什么是寄存器的那个教程和视频里面有说过这个错误。
1.jpg
中文参考手册里面GPIOF的端口基地址有错,要0x40011C00才是正确的。


2.jpg


下面是正确的英文版本。
3.jpg
代码改成这样即可

  1.           //配置GPIOB时钟寄存器
  2.         *(unsigned int*)(0x40021000 | 0x18) |=(1 << 7);
  3.         //配置端口低寄存器CRL(GPIOB)
  4.         *(unsigned int*)(0x40011C00 | 0x00) &=~((0x0f) << 4*7);
  5.         *(unsigned int*)(0x40011C00 | 0x00) |=(1 << 4*7);
  6.         //配置端口输出寄存器ODR(GPIOB)
  7.         *(unsigned int*)(0x40011C00 | 0xC0) &=~(1 << 7);

复制代码



回复 支持 反对

使用道具 举报

发表于 2016-10-26 09:19:07 | 显示全部楼层
weida 发表于 2016-10-26 07:57
楼主写代码之前,原理要搞清楚。不然调试会自乱阵脚

楼主原理是搞懂了,真正的原因是ST的中文翻译的参考资料有错,把端口的基地址搞错了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-26 09:25:57 | 显示全部楼层
谢谢,火哥
回复

使用道具 举报

发表于 2016-10-27 08:32:14 | 显示全部楼层
fire 发表于 2016-10-26 09:19
楼主原理是搞懂了,真正的原因是ST的中文翻译的参考资料有错,把端口的基地址搞错了。

细节啊!也给字节提了个醒,以后自己遇到类似问题,要回过头看看英文版对照对照啊!
回复 支持 反对

使用道具 举报

发表于 2016-10-27 09:41:28 | 显示全部楼层
666666666666666666666666666666666666666666666666666666666666666
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-1-13 10:47 , Processed in 0.039067 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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