野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9377|回复: 3

点亮LED

[复制链接]
发表于 2018-11-24 09:20:17 | 显示全部楼层 |阅读模式
点亮LED (红灯)
[mw_shl_code=c,true]#include "stm32f10x.h"
#define m_periph_base ((unsigned int)0x40000000)
#define mAPB1_BASE m_periph_base
#define mAPB2_BASE (m_periph_base+0x10000)
#define mAHB_BASE (m_periph_base+0x20000)

#define mRCC_BASE (mAHB_BASE+0x1000)
#define mGPIOB_BASE (mAPB2_BASE+0x0c00 )

#define mRCC_APB2ENR *(unsigned int*)(mRCC_BASE+0x18)
#define mGPIOB_CRL *(unsigned int*)(mGPIOB_BASE+0x00)
#define mGPIOB_CRH *(unsigned int*)(mGPIOB_BASE+0x04)
#define mGPIOB_ODR *(unsigned int*)(mGPIOB_BASE+0x0c)
int main (void){
        //open gpiob clock
        mRCC_APB2ENR=0x00000000;
        mRCC_APB2ENR |=((1)<<3);
       
       
        //config io output           push-pull
        mGPIOB_CRL = 0x44444444;
        mGPIOB_CRL |=((1)<<(4*5));
         
        //odr
        //mGPIOB_ODR =0x00000000;
        //mGPIOB_ODR &=~(0x01<<5);
}

void SystemInit(void){}[/mw_shl_code]

原理:从开发板电路图上来看,只要设置PB5为低电平即可点亮红色LED。 代码里 mGPIOB_CRL |=((1)<<(4*5)); 但是,好像跟ODR没啥关系?能否有大神解答一下。
回复

使用道具 举报

发表于 2018-11-24 09:38:30 | 显示全部楼层
CRL是端口配置低寄存器  和它相应的还有一个CRH  两个都是用来配置端口的  说白了就是用来声明某一个引脚用来干什么,有那些参数(比如定为输出后,要确定输出模式、速率等)   而ODR里的数据才是你真正想要某了引脚发送的数据,因为它才是 端口数据输出寄存器  存的是要发送的东西
回复 支持 反对

使用道具 举报

发表于 2018-12-5 11:20:33 | 显示全部楼层
功能比较简单所以只是碰巧而已,如在复杂程序中,则必须对端口的in/out和数据量做详细定义。
回复 支持 反对

使用道具 举报

发表于 2018-12-6 09:36:32 | 显示全部楼层
貌似不是继承大F1指南者开发板的,全塞到main里,说明是学生。宏定义不对齐,说明是新手,代码没有发完,说明和我一样是菜鸡!!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-1 15:52 , Processed in 0.038986 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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