野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 22164|回复: 26

火哥新录制的F103的视频,后面留的小作业

[复制链接]
发表于 2016-7-28 14:18:51 | 显示全部楼层 |阅读模式
我看了火哥新录制的F103的视频,后面留的小作业,自己写LED的闪烁,代码如下,怎么不能实现闪烁,而是长亮呢!!!!



  1. #include "stm32f10x.h"

  2. void Delay(__IO u32 nCount);

  3. int main(void)
  4. {
  5. //        while(1)
  6. //        {
  7.                
  8.                 #if 0
  9.                 //打开 GPIOB 端口的时钟
  10.                 *(unsigned int * )0x40021018 |= ((1)<<3);
  11.                
  12.                 //配置IO(PB5)口为输出
  13.                 *(unsigned int * )0x40010C00 |= ((1)<<(4*5));
  14.                
  15.                 //控制 ODR 寄存器
  16.                 *(unsigned int * )0x40010C0C &= ~(1<<0);
  17.                 #endif
  18.                
  19.                
  20.                 //打开 GPIOE 端口的时钟
  21.                 *(unsigned int * )0x40021018 |= ((1)<<6);
  22.                 Delay(0x0FFFFF);
  23.                 *(unsigned int * )0x40021018 |= ((0)<<6);
  24.                 Delay(0x0FFFFF);
  25.                 *(unsigned int * )0x40021018 |= ((1)<<6);
  26.                
  27.                 //配置IO(PE5)口为输出
  28.                 *(unsigned int * )0x40011800 |= ((1)<<(4*5));
  29.                
  30.                 //控制 ODR 寄存器
  31.                 *(unsigned int * )0x40010C0C &= ~(1<<0);
  32.         
  33. //        }
  34.         
  35. }


  36. //置位        |=                ,清0        &=~        


  37. void Delay(__IO uint32_t nCount)         
  38. {
  39.         for(; nCount != 0; nCount--);
  40. }


  41. void SystemInit(void)
  42. {
  43.         //函数体为空,目的是为了骗过编译器不报错
  44. }
复制代码



回复

使用道具 举报

发表于 2016-7-28 14:38:40 | 显示全部楼层
     //控制 ODR 寄存器
                *(unsigned int * )0x40010C0C &= ~(1<<0);

你控制GPIO口只有这一个语句,没有延时没有关灯操作,带着问题继续学后面的你就知道了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-28 14:48:30 | 显示全部楼层
flyleaf 发表于 2016-7-28 14:38
//控制 ODR 寄存器
                *(unsigned int * )0x40010C0C &= ~(1

我加上延时,要实现灯的熄灭,使用端口位清除寄存器可以实现吗
回复 支持 反对

使用道具 举报

发表于 2016-7-28 14:48:45 | 显示全部楼层
以后发帖子记得用代码的方式提交,而不是直接贴上来。格式为:

回复 支持 反对

使用道具 举报

发表于 2016-7-28 14:51:24 | 显示全部楼层
你不断的开关时钟什么意思,你要想实现GPIO以一定的频率输出高低电平,你应该控制ODR这个寄存器才对
回复 支持 反对

使用道具 举报

发表于 2016-7-28 14:52:21 | 显示全部楼层
火哥哥 发表于 2016-7-28 14:48
我加上延时,要实现灯的熄灭,使用端口位清除寄存器可以实现吗

可以,你可以操作 BRR寄存器也是可以的,我视频里面讲的是操作ODR寄存器。
回复 支持 反对

使用道具 举报

发表于 2016-7-28 14:56:07 | 显示全部楼层
如果你的板子是PE5接的LED,你想让LED闪烁,你代码应该这样写才对


  1. //打开 GPIOE 端口的时钟
  2. *(unsigned int * )0x40021018 |= ((1)<<6);               
  3. //配置IO(PE5)口为输出
  4. *(unsigned int * )0x40011800 |= ((1)<<(4*5));
  5.                

  6. while(1)
  7. {
  8.            //控制 ODR 寄存器
  9.           *(unsigned int * )0x40010C0C &= ~(1<<5);
  10.           // 延时

  11.           *(unsigned int * )0x40010C0C |= (1<<5);
  12.           // 延时

  13. }

复制代码

回复 支持 反对

使用道具 举报

发表于 2016-7-28 14:57:12 | 显示全部楼层
真的是大神,直接操作内存,连寄存器映射都不用,火哥你这视频讲的也真是溜
回复 支持 反对

使用道具 举报

发表于 2016-7-28 14:58:20 | 显示全部楼层
吕一瑾 发表于 2016-7-28 14:57
真的是大神,直接操作内存,连寄存器映射都不用,火哥你这视频讲的也真是溜

我是从最底层的开始讲起,先操作内存,然后再讲解寄存器的映射,然后再讲如何编写固件库,最后才固件库编程
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-28 15:01:00 | 显示全部楼层
fire 发表于 2016-7-28 14:51
你不断的开关时钟什么意思,你要想实现GPIO以一定的频率输出高低电平,你应该控制ODR这个寄存器才对

不断的开关时钟,是我想错了,我以为能实现闪烁呢,结果不行,因为时钟就是心脏,后面多想了一下就明白了,开关时钟是非常错误的做法!
回复 支持 反对

使用道具 举报

发表于 2016-7-28 15:03:05 | 显示全部楼层
火哥哥 发表于 2016-7-28 15:01
不断的开关时钟,是我想错了,我以为能实现闪烁呢,结果不行,因为时钟就是心脏,后面多想了一下就明白了 ...

你这做法看到我都想笑,不过初学,遇到这些问题也正常,加油。
回复 支持 反对

使用道具 举报

发表于 2016-7-28 15:10:57 | 显示全部楼层
火哥哥 发表于 2016-7-28 15:01
不断的开关时钟,是我想错了,我以为能实现闪烁呢,结果不行,因为时钟就是心脏,后面多想了一下就明白了 ...

哈哈,原来你是这样想的,以为关闭时钟IO口就会改变状态,
我就说为什么你不断配置时钟呢,

而且你开关时钟的代码也有问题,置1可以用 |=  ,置0不能用这种方式 ,要用 &= ~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-28 15:11:36 | 显示全部楼层
吕一瑾 发表于 2016-7-28 14:57
真的是大神,直接操作内存,连寄存器映射都不用,火哥你这视频讲的也真是溜

火哥很厉害的,这次是翻录上次的,上次还是4年前
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-28 15:13:42 | 显示全部楼层
fire 发表于 2016-7-28 14:56
如果你的板子是PE5接的LED,你想让LED闪烁,你代码应该这样写才对

int main(void)
{

        //打开 GPIOE 端口的时钟
        *(unsigned int * )0x40021018 |= ((1)<<6);

        //配置IO(PE5)口为输出
        *(unsigned int * )0x40011800 |= ((1)<<(4*5));
        while(1)
        {
                //控制 ODR 寄存器
                *(unsigned int * )0x4001180C &= ~(1<<5);
                Delay(0x0FFFFF);
                *(unsigned int * )0x40011814 |= (1<<5);
                Delay(0x0FFFFF);
        }       
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-28 15:16:03 | 显示全部楼层

我的端口是GPIOE(PE5),地址应该是0x400118+偏移地址;我烧写进去灯还是不闪烁呢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-28 15:19:27 | 显示全部楼层
flyleaf 发表于 2016-7-28 15:10
哈哈,原来你是这样想的,以为关闭时钟IO口就会改变状态,
我就说为什么你不断配置时钟呢,

谢谢你啊,我是弄错了,应该用火哥最经典的    置位        |= ,清0 &=~        哈哈哈·····
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-28 15:22:03 | 显示全部楼层

哎,初学太粗心了,弄好了,谢谢火哥!!!
             //控制 ODR 寄存器
                *(unsigned int * )0x4001180C &= ~(1<<5);
                Delay(0x0FFFFF);
                *(unsigned int * )0x4001180C |= (1<<5);
                Delay(0x0FFFFF);
回复 支持 反对

使用道具 举报

发表于 2016-7-28 15:25:32 | 显示全部楼层

你这里面的两个ODR寄存器的地址怎么不一样
回复 支持 反对

使用道具 举报

发表于 2016-7-28 15:26:21 | 显示全部楼层
火哥哥 发表于 2016-7-28 15:22
哎,初学太粗心了,弄好了,谢谢火哥!!!
             //控制 ODR 寄存器
                *(unsigned int * )0x40 ...

完全自己写出来的代码是不是感觉很爽
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-28 15:30:16 | 显示全部楼层
fire 发表于 2016-7-28 15:26
完全自己写出来的代码是不是感觉很爽

是啊,感觉就像在天上
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-28 15:31:31 | 显示全部楼层
吕一瑾 发表于 2016-7-28 15:25
你这里面的两个ODR寄存器的地址怎么不一样

敲代码的时候手抖了一下,结果就出不来闪烁,我修改成一样就好了,哎,自己太粗心
回复 支持 反对

使用道具 举报

发表于 2016-7-28 15:34:56 | 显示全部楼层
牛逼啊,火哥,直接讲操作内存去了,这样学会了的话,库函数岂不是手到擒来
回复 支持 反对

使用道具 举报

发表于 2016-7-28 15:36:39 | 显示全部楼层
现在新录制的视频后面还有留作业?我去,还之前的视频真是提升巨大啊火逼
回复 支持 反对

使用道具 举报

发表于 2016-7-28 15:38:35 | 显示全部楼层
支持一个,楼主作为初学,很不错了啊,不像我,还在学点灯,都快成点灯大师了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-28 15:39:59 | 显示全部楼层
几折荒年 发表于 2016-7-28 15:36
现在新录制的视频后面还有留作业?我去,还之前的视频真是提升巨大啊火逼

是啊,火哥这样做是很对的!!!不留作业你看了视频就把火哥讲得做的一下,个人我可以大胆的说掌握的还不足50%
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-28 15:42:50 | 显示全部楼层
平凡之路 发表于 2016-7-28 15:34
牛逼啊,火哥,直接讲操作内存去了,这样学会了的话,库函数岂不是手到擒来

火哥的绝对可以超越郭天祥,周立功。你算没学过51的话,火哥都能给你讲得很透彻
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-28 16:22:34 | 显示全部楼层
伯思美 发表于 2016-7-28 15:38
支持一个,楼主作为初学,很不错了啊,不像我,还在学点灯,都快成点灯大师了

你怎么一直是一灯大师啊
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 06:55 , Processed in 0.047136 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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