你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32点亮LED

[复制链接]
在路上11111111 发布时间:2016-10-27 20:05
#define _IO volatile
typedef unsigned int uint32_t;
typedef _IO uint32_t vu32;
typedef unsigned short int uint16_t;


#define GPIO_Pin_0   ((uint16_t)0x0001)//0000000000000001第一引脚置1(对应的是BSRR和BRR寄存器的16位)
#define GPIO_Pin_1   ((uint16_t)0x0002)//0000000000000010第二引脚置1(对应的是BSRR和BRR寄存器的16位)
#define GPIO_Pin_2   ((uint16_t)0x0004)//0000000000000100第三引脚置1(对应的是BSRR和BRR寄存器的16位)
#define GPIO_Pin_3   ((uint16_t)0x0008)//0000000000001000第四引脚置1(对应的是BSRR和BRR寄存器的16位)
#define GPIO_Pin_4   ((uint16_t)0x0010)//0000000000010000第五引脚置1(对应的是BSRR和BRR寄存器的16位)
#define GPIO_Pin_5   ((uint16_t)0x0020)//0000000000100000第六引脚置1(对应的是BSRR和BRR寄存器的16位)
#define GPIO_Pin_6   ((uint16_t)0x0040)//0000000001000000第七引脚置1(对应的是BSRR和BRR寄存器的16位)
#define GPIO_Pin_7   ((uint16_t)0x0080)//0000000010000000第八引脚置1(对应的是BSRR和BRR寄存器的16位)
#define GPIO_Pin_8   ((uint16_t)0x0100)//0000000100000000第九引脚置1(对应的是BSRR和BRR寄存器的16位)
#define GPIO_Pin_9   ((uint16_t)0x0200)//0000001000000000第十引脚置1(对应的是BSRR和BRR寄存器的16位)
#define GPIO_Pin_10  ((uint16_t)0x0400)//0000010000000000第11引脚置1(对应的是BSRR和BRR寄存器的16位)
#define GPIO_Pin_11  ((uint16_t)0x0800)//0000100000000000第12引脚置1(对应的是BSRR和BRR寄存器的16位)
#define GPIO_Pin_12  ((uint16_t)0x1000)//0001000000000000第13引脚置1(对应的是BSRR和BRR寄存器的16位)
#define GPIO_Pin_13  ((uint16_t)0x2000)//0010000000000000第14引脚置1(对应的是BSRR和BRR寄存器的16位)
#define GPIO_Pin_14  ((uint16_t)0x4000)//0100000000000000第15引脚置1(对应的是BSRR和BRR寄存器的16位)
#define GPIO_Pin_15  ((uint16_t)0x8000)//1000000000000000第16引脚置1(对应的是BSRR和BRR寄存器的16位)
#define GPIO_Pin_All ((uint16_t)0xFFFF)//1111111111111111


#define RCC_APB2Periph_AFIO   ((uint32_t)0x00000001)
#define RCC_APB2Periph_GPIOA  ((uint32_t)0x00000004)
#define RCC_APB2Periph_GPIOB  ((uint32_t)0x00000008)
#define RCC_APB2Periph_GPIOC  ((uint32_t)0x00000010)
#define RCC_APB2Periph_GPIOD  ((uint32_t)0x00000020)//这个是0000000000010000   主要是为了配合时钟的16位(其中第5位是IO口D的使能时钟位)
/***************GPIOD**********/
typedef struct
{
   _IO uint32_t CRL;//端口配置低寄存器
   _IO uint32_t CRH;//端口配置高寄存器
   _IO uint32_t IDR;//端口输入数据寄存器
   _IO uint32_t ODR;//端口输出数据寄存器
   _IO uint32_t BSRR;//端口位设置/清除寄存器
   _IO uint32_t BRR;//端口位清除寄存器
   _IO uint32_t LCKR;//端口配置锁定寄存器
}GPIO_TypeDef;

typedef struct
{
   _IO uint32_t CR;//时钟控制寄存器
   _IO uint32_t CFGR;//时钟配置寄存器
   _IO uint32_t CIR;//时钟中断寄存器
   _IO uint32_t APB2RSTR;//APB2外设复位寄存器
   _IO uint32_t APB1RSTR;//APB1外设复位寄存器
   _IO uint32_t AHBENR;//AHB外设时钟使能寄存器
   _IO uint32_t APB2ENR;//APB2外设时钟使能寄存器
   _IO uint32_t APB1ENR;//APB1外设时钟使能寄存器
   _IO uint32_t BDCR;//备份域控制寄存器
   _IO uint32_t CSR;//控制/状态寄存器
}RCC_TypeDef;


/***********GPIO管脚的内存地址***********/
#define PERIPH_BASE     ((uint32_t)0x40000000)
#define APB2PERIPH_BASE (PERIPH_BASE+0x10000)
#define GPIOD_BASE      (APB2PERIPH_BASE+0x1400)
#define GPIOD           ((GPIO_TypeDef *)GPIOD_BASE)

/**********RCC时钟***********************/
#define AHBPERIPH_BASE  (PERIPH_BASE+0x20000)
#define RCC_BASE        (AHBPERIPH_BASE+0x1000)
#define RCC             ((RCC_TypeDef *)RCC_BASE)


void Delay(uint32_t nCount)
{
    for(;nCount!=0;nCount--);
}
int main(void)
{
   RCC->APB2ENR|=RCC_APB2Periph_GPIOD;//
   //GPIOD->CRL=0xFFFF00FF;
   GPIOD->CRL=0x30033300;//配置CRL寄存器----这个模式  通用推挽输出模式  输出模式,最大速度50MHz
   while(1)
   {
       GPIOD->BRR=GPIO_Pin_2;//BRR写1置0-->使ODR(输出低电平,写0无影响)--->使LED亮了
           Delay(0xFFFF);
           GPIOD->BRR=GPIO_Pin_3;
           Delay(0X2FFFF);
           GPIOD->BRR=GPIO_Pin_4;
           Delay(0xFFFFF);
           GPIOD->BRR=GPIO_Pin_7;
           Delay(0X2FFFFF);
           GPIOD->BSRR=GPIO_Pin_2;//BSRR写1置1(前16位是BS,后16位是BR)-->使ODR(输出高电平,写0无影响)--->LED灭了.
           Delay(0xFFFF);
           GPIOD->BSRR=GPIO_Pin_3;
           Delay(0X2FFFF);
           GPIOD->BSRR=GPIO_Pin_4;
           Delay(0xFFFFF);
           GPIOD->BSRR=GPIO_Pin_7;
           Delay(0X2FFFFF);
   }
}
通过这个程序,我了解到各个与GPIO口有关的寄存器的功能,以及时钟的寄存器的功能。






评分

参与人数 1 ST金币 +10 收起 理由
zero99 + 10

查看全部评分

收藏 1 评论13 发布时间:2016-10-27 20:05

举报

13个回答
在路上11111111 回答时间:2016-10-27 20:05:43
不会用代码片,所以辛苦大家看这个了
aoxiangwode2008 回答时间:2016-10-27 20:31:17
好贴,从最基本的寄存器开始写,很不错的。
在路上11111111 回答时间:2016-10-27 20:41:29
谢谢,只是新手
在路上11111111 回答时间:2016-10-27 20:41:45
我还要努力
猫猫侠 回答时间:2016-10-27 20:42:50
谢谢分享  先记号下    等集齐了元件点点看
anywill 回答时间:2016-10-28 07:15:41
鼓励一下,
笑鸟007 回答时间:2016-10-28 07:40:35
不错,写的很详细!!
andypanfan 回答时间:2016-10-28 09:11:01
在路上11111111 回答时间:2016-10-28 10:03:39
我会努力坚持下去的,大家一起加油啊
12下一页

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似分享

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版