野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 22335|回复: 2

寄存器版点灯的疑问

[复制链接]
发表于 2020-11-21 19:42:23 | 显示全部楼层 |阅读模式
疑问就是我看视频,火哥main函数里是没有用while函数也可以点灯,而我的不行,非得放在while函数里才能点?这是为什么?


#include "stm32f4xx.h"

int main(void)
{
                       
  while(1)
  {
          /* 在这里添加程序主体代码 */
               
                /* 打开GPIOH端口时钟 */
                *( unsigned int *)(0x40023800 + 0x30) |= (1<<7);
               
                /* GPIOH 配置为输出 */
                *( unsigned int *)(0x40021C00 + 0x00) &= ~((0x03)<<(2*9));
                *( unsigned int *)(0x40021C00 + 0x00) |= (1<<(2*9));
               
                /* PH9 输出高电平 */
                *( unsigned int *)(0x40021C00 + 0x14) |= (1<<9);
               
                /* PH9 输出低电平 */
                *( unsigned int *)(0x40021C00 + 0x14) &= ~(1<<9);
        }
       
}

void SystemInit(void)
{
     /* 函数体为空,目的是为了骗过编译器不报错 */
}


回复

使用道具 举报

发表于 2020-11-21 22:55:56 | 显示全部楼层
两个可能吧,1.while是判断循环条件是否为真,若为真则一直执行循环体,为假就不执行语句。然后你的程序写的是点灯再关灯,如果没有while(1)循环,就只会执行一次,所以就看不到LED灯的闪烁。2.要不你把输出高低顺序电换一下试试。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-22 20:18:09 | 显示全部楼层
感谢老哥,懂了。1:不加while函数,放在main函数里得把置零的语句注释掉或者调换亮灭的顺序才能点灯;2:如果放在while函数里,不注释掉置零的灭灯语句也是可以,只是程序是一直重复亮灭亮灭的状态,所以灯会亮但是会比较暗。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 05:31 , Processed in 0.042932 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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