野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8449|回复: 7

新手求助stm32点灯问题

[复制链接]
发表于 2022-6-9 17:57:00 | 显示全部楼层 |阅读模式
#include "stm32f10x.h"
void delay(unsigned int z)
{
        unsigned int x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}


int main(void)
{
        //时钟
        *(unsigned int*)0x40021018 |= (1<<3);
        
        *(unsigned int*)0x40010C00 &=~((0x0F)<<(4*1));      
        *(unsigned int*)0x40010C00 |= (1<<4*1);                        //PB5蓝灯      
       while(1){
                *(unsigned int*)0x40010C0C |= (1<<1);                        //PB0蓝灯      
      }
}


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

回复

使用道具 举报

 楼主| 发表于 2022-6-9 19:54:22 | 显示全部楼层
为什么加到while(1)里面,LED是常亮的,去掉while之后就能正常熄灭
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-9 19:56:49 | 显示全部楼层
注释应该是PB1蓝灯
回复 支持 反对

使用道具 举报

发表于 2022-6-9 21:29:41 | 显示全部楼层
你这寄存器用的是真厉害 连寄存器名都省了 这手头没手册 都不知道你想干啥
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-10 11:24:33 | 显示全部楼层
babyrabbit 发表于 2022-6-9 21:29
你这寄存器用的是真厉害 连寄存器名都省了 这手头没手册 都不知道你想干啥 ...

#include "stm32f10x.h"

int main(void)
{
        unsigned long i;
   
        RCC_APB2ENR |= ((1)<<3);

        GPIOB_CRL &= ~((0x0F)<<(4*0));
        GPIOB_CRL |= ((0x03)<<(4*0));
        
        while(1)
        {
           
                GPIOB_ODR |= ((1)<<0);
        }
}

void SystemInit(void)
{

}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-10 11:24:55 | 显示全部楼层
babyrabbit 发表于 2022-6-9 21:29
你这寄存器用的是真厉害 连寄存器名都省了 这手头没手册 都不知道你想干啥 ...

我又改了一下,就是点亮PB0绿灯
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-10 11:25:42 | 显示全部楼层
babyrabbit 发表于 2022-6-9 21:29
你这寄存器用的是真厉害 连寄存器名都省了 这手头没手册 都不知道你想干啥 ...

他本来应该熄灭的,但是把ODR操作放到while里面他是亮的
回复 支持 反对

使用道具 举报

发表于 2022-6-10 17:52:31 | 显示全部楼层
我觉得啊,控制外部时钟一开一关也可以让他闪,因为外部时钟不打开,就算ODR正常也不亮
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-24 00:34 , Processed in 0.043459 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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