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

STM32F072的寄存器LED闪烁

[复制链接]
wamcncn 发布时间:2015-1-26 15:37
本帖最后由 wambob 于 2015-1-26 15:40 编辑

看了网上视频的寄存器操作,又看了下072的参考手册还真和M3核不一样
GPIO口的时钟使能寄存器是AHBENR,
而GPIO口寄存器有4个32位的配置寄存器,分别是MODER,OTYPER,OSPEEDR,PUPDR.
                             2个32位的数据寄存器IDR和ODR.
                             1个32位的设置/复位寄存器BSRR.
                             1个32位的锁存器LCKR  (PORA和PORTB).
                              2个复用选择寄存器AFRH 和AFRL(PORTA-PORTE).
072开发板上LED在PA5上;
void LED_Init(void)
{
    RCC->AHBENR|=1<<17;
    GPIOA->MODER&=0xfffff0ff;
    GPIOA->MODER|=0x00000400;  
    GPIOA->OTYPER&=0xffffffef;  
    GPIOA->OSPEEDR|=0x00000c00;  
}

int main(void)
{              
   
SystemInit();        

    LED_Init();
    while(1)
{
        GPIOA->ODR|=1<<5;
        Delay_Ms(500);
        GPIOA->ODR&=0xffffffcf;
        Delay_Ms(500);
      
  }
     }
   比起库函数老说,是不是很精简

            
        


收藏 1 评论15 发布时间:2015-1-26 15:37

举报

15个回答
qianfan 回答时间:2015-1-26 17:16:11
如果不喜欢官方的库,可以自己封装一个。其实感觉官方的IO接口函数配置有点麻烦。自己写一个digitalWrite其实是挺好的。
harvardx 回答时间:2015-1-26 16:01:11
好深入啊 .喜欢库操作 喜欢mbed操作的飘过. 对直接寄存器操作的表示敬佩.
mmttss 回答时间:2015-1-26 19:49:48
喜欢这种直接点灯方式
有工程包吗? 那些头文件需要被include? 这我还不熟
谢谢
lkl0305 回答时间:2015-1-26 19:52:24
好,多谢分享
AndyYau-268557 回答时间:2015-1-26 19:58:53
楼主又开始搞寄存器了,厉害
yceast 回答时间:2015-1-26 20:56:22
支持  开源
damiaa 回答时间:2015-1-26 21:19:00
是精简点。
wu1169668869 回答时间:2015-1-26 21:39:14
直接操作寄存器!!!
wamcncn 回答时间:2015-1-26 22:43:53
mmttss 发表于 2015-1-26 19:49
喜欢这种直接点灯方式
有工程包吗? 那些头文件需要被include? 这我还不熟
谢谢 ...

有,传上去了

DEMO.rar

下载

1.13 MB, 下载次数: 2

mmttss 回答时间:2015-1-27 00:40:24
我依样画葫芦下 STM32F429 discovery 也成功了
我先用 STM32CubeMX create 一個空的 STM32F429ZI Project(未规划任何Pins)
用Keil开启 Project

再将 wambob大大的 code 搬上 main.c
最后找出 LED pin 相關的暂存器即可

static unsigned char fac_us;
static unsigned int fac_ms;
void Delay_Init(unsigned char SYSCLK)
{
    SysTick->CTRL&=0xFFFFFFFB;
    fac_us=SYSCLK/8;
    fac_ms=(unsigned int)fac_us*1000;
}
void delay_us(unsigned int nus)
{                                    
        unsigned long temp;                  
        SysTick->LOAD=(unsigned long)nus*fac_us;
        SysTick->VAL =0x00;           //?????
        SysTick->CTRL=0x01 ;          //????  
        do
        {
                temp=SysTick->CTRL;
        }
        while((temp&0x01)&&!(temp&(1<<16)));//??????   
        SysTick->CTRL=0x00;       //?????
        SysTick->VAL =0X00;       //?????                     
}


void delay_ms(unsigned int nms)
{                                    
        unsigned long temp;                  
        SysTick->LOAD=(unsigned long)nms*fac_ms;
        SysTick->VAL =0x00;           //?????
        SysTick->CTRL=0x01 ;          //????  
        do
        {
                temp=SysTick->CTRL;
        }
        while((temp&0x01)&&!(temp&(1<<16)));//??????   
        SysTick->CTRL=0x00;       //?????
        SysTick->VAL =0X00;       //?????                     
}

void LED_Init(void)
{
    RCC->AHB1ENR|=0x40;//1<<17;
    GPIOG->MODER&=0xf0ffffff;
    GPIOG->MODER|=0x04000000;   //怀堤
    GPIOG->OTYPER&=0xffffffef;  //芢侺
    GPIOG->OSPEEDR|=0x00000c00;  //詢厒
}

int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration----------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* Configure the system clock */
  SystemClock_Config();

  /* Initialize all configured peripherals */

  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* USER CODE BEGIN 3 */
  /* Infinite loop */
        Delay_Init(48);
  LED_Init();

  while (1)
  {
    GPIOG->ODR|=0x00002000;
    delay_ms(1000);
    GPIOG->ODR&=0xffffcfff;
    delay_ms(1000);
  }
  /* USER CODE END 3 */

}

led2.zip

下载

4.47 MB, 下载次数: 0

Project

holts1 回答时间:2015-1-27 08:02:32
学习了…………
星辰一方 回答时间:2015-1-27 09:57:54
QianFan 发表于 2015-1-26 17:16
如果不喜欢官方的库,可以自己封装一个。其实感觉官方的IO接口函数配置有点麻烦。自己写一个digitalWrite其 ...

支持digitalwrite
wamcncn 回答时间:2015-1-27 12:53:30
mmttss 发表于 2015-1-27 00:40
我依样画葫芦下 STM32F429 discovery 也成功了
我先用 STM32CubeMX create 一個空的 STM32F429ZI Project( ...

Delay_Init(48);
参数48是系统时钟,你可以改的,429的时钟是多少呢?
qianfan 回答时间:2015-1-27 13:03:29
wambob 发表于 2015-1-27 12:53
Delay_Init(48);
参数48是系统时钟,你可以改的,429的时钟是多少呢?

标准的是180M
12下一页

所属标签

相似技术帖

官网相关资源

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