野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 51296|回复: 58

火哥新录制的STM32F103第7讲(第2节)使用寄存器点亮LED,作业情况

[复制链接]
发表于 2016-7-29 09:36:06 | 显示全部楼层 |阅读模式
火哥新录制的STM32F103第7讲(第2节)使用寄存器点亮LED,我个人的作业情况(实现了两个LED的闪烁+流水灯),代码见下:
#include "stm32f10x.h"

void Delay(__IO u32 nCount);

int main(void)
{

        //打开 GPIOB 端口的时钟
        *(unsigned int * )0x40021018 |= ((1)<<3);
       
        //配置IO(PB5)口为输出
        *(unsigned int * )0x40010C00 |= ((1)<<(4*5));
       

       
        //打开 GPIOE 端口的时钟
        *(unsigned int * )0x40021018 |= ((1)<<6);

        //配置IO(PE5)口为输出
        *(unsigned int * )0x40011800 |= ((1)<<(4*5));
       
       
        while(1)
        {
                //控制 ODR 寄存器
                *(unsigned int * )0x40010C0C &= ~(1<<5);
                Delay(0x0FFFFF);
                *(unsigned int * )0x40010C0C |= (1<<5);
                Delay(0x0FFFFF);
               
                *(unsigned int * )0x4001180C &= ~(1<<5);
                Delay(0x0FFFFF);
                *(unsigned int * )0x4001180C |= (1<<5);
                Delay(0x0FFFFF);
        }       
}


//火哥宝典(置位        |=        ,清0        &=~)


void Delay(__IO uint32_t nCount)         
{
        for(; nCount != 0; nCount--);
}


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

回复

使用道具 举报

发表于 2016-7-29 10:17:22 | 显示全部楼层
哎呦,不错哦,以后可以都把自己的作业帖一下,方便大家参考
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-29 10:23:43 | 显示全部楼层
flyleaf 发表于 2016-7-29 10:17
哎呦,不错哦,以后可以都把自己的作业帖一下,方便大家参考

没问题的,谢谢你关系!!!你是大牛+大咖!!!
回复 支持 反对

使用道具 举报

发表于 2016-7-29 10:25:15 | 显示全部楼层
置位        |=        ,清0        &=~

真的值得仔细理解,好神奇的操作
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-29 10:29:01 | 显示全部楼层
要努力不要命 发表于 2016-7-29 10:25
置位        |=        ,清0        &=~

真的值得仔细理解,好神奇的操作

是啊,厉害的不要的不要的!!!
回复 支持 反对

使用道具 举报

发表于 2016-7-29 13:16:08 | 显示全部楼层
我按照你的程序写了,怎么提示Ucout没有定义啊。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-29 13:34:42 | 显示全部楼层
我的程序里面没有Ucout,看你是不是敲错代码了
回复 支持 反对

使用道具 举报

发表于 2016-7-29 14:19:21 | 显示全部楼层
清零,置位,依然清楚的记得,对于新手来说,真的是感觉好神奇
回复 支持 反对

使用道具 举报

发表于 2016-7-29 14:19:48 | 显示全部楼层
这样写出来一个作业帖子不错啊,新手可以加深印象和学习激情
回复 支持 反对

使用道具 举报

发表于 2016-7-29 14:20:28 | 显示全部楼层
支持下这种学习精神,当初我可没这样做,也没有这么好的学习机会,现在火哥的资料越来越完善了啊
回复 支持 反对

使用道具 举报

发表于 2016-7-29 14:22:16 | 显示全部楼层
赞,初学 有这样的水平不错啊,我就想问问这个例程你写了多久,改了多久才编译通过的哈哈
回复 支持 反对

使用道具 举报

发表于 2016-7-29 14:23:03 | 显示全部楼层
//火哥宝典(置位        |=        ,清0        &=~)


void Delay(__IO uint32_t nCount)         
{
        for(; nCount != 0; nCount--);
}


void SystemInit(void)
{
        //函数体为空,目的是为了骗过编译器不报错
}
这个原理是什么,我还是不怎么懂,见谅,刚学习2天
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-29 15:22:29 | 显示全部楼层
惆怅还依旧 发表于 2016-7-29 14:23
//火哥宝典(置位        |=        ,清0        &=~)

看火哥的视频,里面讲的很到位
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-29 15:22:58 | 显示全部楼层
康锦 发表于 2016-7-29 14:22
赞,初学 有这样的水平不错啊,我就想问问这个例程你写了多久,改了多久才编译通过的哈哈

没有多久,哈哈,你也可以试试写一下
回复 支持 反对

使用道具 举报

发表于 2016-7-29 16:03:41 | 显示全部楼层
火哥哥 发表于 2016-7-29 13:34
我的程序里面没有Ucout,看你是不是敲错代码了

看错了,应该是nCount。。。但还是显示没定义啊/????

回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-29 17:10:52 | 显示全部楼层
shidaide6 发表于 2016-7-29 16:03
看错了,应该是nCount。。。但还是显示没定义啊/????

你用的库和我的不一样
回复 支持 反对

使用道具 举报

发表于 2016-7-30 11:46:15 | 显示全部楼层
火哥哥 发表于 2016-7-29 17:10
你用的库和我的不一样

不都一样的吗???求解
回复 支持 反对

使用道具 举报

发表于 2016-7-30 21:21:06 来自手机 | 显示全部楼层
哎哟,不错哦。后面的视频我都会留作业,看看能不能都完成。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-30 21:54:16 来自手机 | 显示全部楼层
fire 发表于 2016-7-30 21:21
哎哟,不错哦。后面的视频我都会留作业,看看能不能都完成。

好。火哥,辛苦了。
回复 支持 反对

使用道具 举报

发表于 2016-7-31 09:58:44 来自手机 | 显示全部楼层
fire 发表于 2016-7-30 21:21
哎哟,不错哦。后面的视频我都会留作业,看看能不能都完成。

那大家岂不是暑假很忙?
回复 支持 反对

使用道具 举报

发表于 2016-7-31 11:36:53 | 显示全部楼层
我也做了这个作业,但是无论仿真还是实际都不闪烁,以楼主的代码为例,经过反复尝试,在设置推挽输出的前面加了这么两句,问题解决:
        *(unsigned int*)(0x40011800) &= ~((0x0F)<<(4*5));
        *(unsigned int*)(0x40010C00) &= ~((0x0F)<<(4*5));
现在我的问题就是,难道CRL寄存器初始值不是0吗~~~
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2016-7-31 20:30:57 | 显示全部楼层
rdzpy 发表于 2016-7-31 11:36
我也做了这个作业,但是无论仿真还是实际都不闪烁,以楼主的代码为例,经过反复尝试,在设置推挽输出的前面 ...

不会吧,我调试时没有问题的
回复 支持 反对

使用道具 举报

发表于 2016-7-31 20:53:17 | 显示全部楼层
我也想不通,不加这两句的话,可以点亮,但是没法熄灭
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-31 21:04:05 | 显示全部楼层
rdzpy 发表于 2016-7-31 20:53
我也想不通,不加这两句的话,可以点亮,但是没法熄灭

你没明白   我是流水灯  操作ODR寄存器
回复 支持 反对

使用道具 举报

发表于 2016-8-1 11:51:37 | 显示全部楼层
火哥哥 发表于 2016-7-31 21:04
你没明白   我是流水灯  操作ODR寄存器
  1. 一样的,我的代码跟你的就差个CRL寄存器的清零操作,贴在下面:

  2. #include "stm32f10x.h"

  3. int main(void)
  4. {
  5.         unsigned long i;
  6.         *(unsigned int*)(0x40021018) |= ((1)<<6);
  7.         *(unsigned int*)(0x40021018) |= ((1)<<3);
  8.         *(unsigned int*)(0x40011800) &= ~((0x0F)<<(4*5));
  9.         *(unsigned int*)(0x40010C00) &= ~((0x0F)<<(4*5));
  10.         *(unsigned int*)(0x40011800) |= ((0x03)<<(4*5));
  11.         *(unsigned int*)(0x40010C00) |= ((0x03)<<(4*5));
  12.         
  13.         while(1)
  14.         {
  15.                 *(unsigned int*)(0x4001180C) &= ~((1)<<5);
  16.                 *(unsigned int*)(0x40010C0C) |= ((1)<<5);
  17.                 for(i=200000;i>0;i--);
  18.                 *(unsigned int*)(0x4001180C) |= ((1)<<5);
  19.                 *(unsigned int*)(0x40010C0C) &= ~((1)<<5);
  20.                 for(i=200000;i>0;i--);
  21.         }
  22. }

  23. void SystemInit(void)
  24. {

  25. }
复制代码

回复 支持 1 反对 0

使用道具 举报

发表于 2016-8-1 12:00:46 | 显示全部楼层
rdzpy 发表于 2016-7-31 11:36
我也做了这个作业,但是无论仿真还是实际都不闪烁,以楼主的代码为例,经过反复尝试,在设置推挽输出的前面 ...

对,我忘了讲在操作CRL寄存器的时候要先清0,复位值都是0,可你的情况默认不是0
回复 支持 反对

使用道具 举报

发表于 2016-8-1 12:01:51 | 显示全部楼层
火哥哥 发表于 2016-7-31 20:30
不会吧,我调试时没有问题的

他的情况是CRL寄存器的默认值不是0,我们这个代码是基于CRL的默认值是0的,下节课里面我已经加上了,在操作CRL的时候,必须把相应的位全部清0.
回复 支持 反对

使用道具 举报

发表于 2016-8-1 15:04:11 | 显示全部楼层
这下彻底清楚啦!!!多谢!!!
回复 支持 反对

使用道具 举报

发表于 2016-8-1 15:08:58 | 显示全部楼层
rdzpy 发表于 2016-8-1 15:04
这下彻底清楚啦!!!多谢!!!

我在刚刚录制的视频里面也拿你这个帖子分析了,主要是代码写的不够严谨,后面我加上了。
回复 支持 反对

使用道具 举报

发表于 2016-8-1 15:14:42 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2016-8-1 15:20:12 | 显示全部楼层
fire 发表于 2016-8-1 15:08
我在刚刚录制的视频里面也拿你这个帖子分析了,主要是代码写的不够严谨,后面我加上了。

火哥,一丝不苟!!!
回复 支持 反对

使用道具 举报

发表于 2016-8-1 18:41:55 | 显示全部楼层
交作业 水一下经验

  1. #include "stm32f10x.h"
  2. #define LED1_ON         *(unsigned int *)(0x40010c0c) &= ~(1<<0)
  3. #define LED1_OFF         *(unsigned int *)(0x40010c0c) |=  (1 << 0)

  4. #define LED2_ON         *(unsigned int *)(0x40010c0c) &= ~(1<<1)
  5. #define LED2_OFF         *(unsigned int *)(0x40010c0c) |=  (1 << 1)

  6. #define LED3_ON         *(unsigned int *)(0x40010c0c) &= ~(1<<5)
  7. #define LED3_OFF         *(unsigned int *)(0x40010c0c) |=  (1 << 5)

  8. #define LED4_ON         *(unsigned int *)(0x40011c0c) &=  ~( 1<< 7)
  9. #define LED4_OFF  *(unsigned int *)(0x40011c0c) |=  ( 1<< 7)
  10.         
  11. #define LED5_ON   *(unsigned int *)(0x40011c0c) &=  ~( 1<< 8)
  12. #define LED5_OFF        *(unsigned int *)(0x40011c0c) |=  ( 1<< 8)


  13. void Delay(unsigned int x);

  14. int main (void)
  15. {
  16.         //开启GPIOB端口时钟
  17.         *(unsigned int *)(0x40021018) |= ((1) << 3);
  18.         
  19.         //开启GPIOF端口时钟
  20.         *(unsigned int *)(0x40021018) |= ((1) << 7);
  21.         
  22.         //配置GPIO_B0口为输出
  23.         *(unsigned int *)(0x40010c00) |= ((1) << (4*0));
  24.         
  25.         //配置GPIO_B1口为输出
  26.         *(unsigned int *)(0x40010c00) |= ((1) << (4*1));
  27.         
  28.         //配置GPIO_B5口为输出
  29.         *(unsigned int *)(0x40010c00) |= ((1) << (4*5));
  30.         
  31.         //配置GPIO_F7口为输出
  32.         *(unsigned int *)(0x40011c00) |= ((1) << (4*7));
  33.         
  34.         //配置GPIO_F8口为输出
  35.         *(unsigned int *)(0x40011c04) |= ((1) << (4*0));
  36.         
  37.         while(1)
  38.         {

  39.                 LED1_ON;LED2_OFF;LED3_OFF;
  40.                 Delay(0x09ffff);
  41.                
  42.                 LED2_ON;LED3_OFF;LED1_OFF;
  43.                 Delay(0x09ffff);
  44.                
  45.                 LED3_ON;LED1_OFF;LED2_OFF;
  46.                 Delay(0x09ffff);
  47.                
  48.                 LED1_ON;LED2_ON;LED3_OFF;
  49.                 Delay(0x09ffff);
  50.                
  51.                 LED2_ON;LED3_ON;LED1_OFF;
  52.                 Delay(0x09ffff);

  53.                 LED3_ON;LED1_ON;LED2_OFF;
  54.                 Delay(0x09ffff);
  55.                
  56.                 LED1_ON;LED2_ON;LED3_ON;
  57.                 Delay(0x09ffff);
  58.                
  59.                 LED1_OFF;LED2_OFF;LED3_OFF;
  60.                 Delay(0x09ffff);
  61.                
  62.                 LED4_ON;LED5_OFF;
  63.                 Delay(0x09ffff);
  64.         
  65.                 LED5_ON;LED4_OFF;
  66.                 Delay(0x09ffff);
  67.         
  68.                 LED4_OFF;LED5_OFF;
  69.                 Delay(0x09ffff);
  70.         }
  71. }

  72. void Delay(unsigned int x)
  73. {
  74.                 do
  75.                 {
  76.                                 ;
  77.                 }        while(x--);
  78. }

  79. void SystemInit(void)
  80. {
  81.         
  82. }

复制代码

回复 支持 反对

使用道具 举报

发表于 2016-8-1 18:44:08 | 显示全部楼层
qq741931893 发表于 2016-8-1 18:41
交作业 水一下经验
#include "stm32f10x.h"
#define LED1_ON         *(unsigned int *)(0x40010c0c) &= ~(1

你这个作业教的有点牛逼
回复 支持 反对

使用道具 举报

发表于 2016-8-1 18:46:14 | 显示全部楼层
qq741931893 发表于 2016-8-1 18:41
交作业 水一下经验

LED1/2/3是都对了,LED4跟LED5哪里l来的。
回复 支持 反对

使用道具 举报

发表于 2016-8-1 18:55:45 | 显示全部楼层
fire 发表于 2016-8-1 18:46
LED1/2/3是都对了,LED4跟LED5哪里l来的。

STM32_ISO版有3个LED的啊 火哥你不知道啊?
1.jpg
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-1 21:46:54 | 显示全部楼层
qq741931893 发表于 2016-8-1 18:55
STM32_ISO版有3个LED的啊 火哥你不知道啊?

好强悍,机油!!!!
回复 支持 反对

使用道具 举报

发表于 2016-8-2 09:26:25 | 显示全部楼层
楼主的程序是不是缺个头文件,编译后显示nCount是undefined
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-2 09:32:10 | 显示全部楼层
ZGG2016 发表于 2016-8-2 09:26
楼主的程序是不是缺个头文件,编译后显示nCount是undefined

我是加在工程文件里面的
回复 支持 反对

使用道具 举报

发表于 2016-9-18 09:22:57 | 显示全部楼层
#include"stm32f10x.h"


void delay(unsigned int j)
{
       
        while(j--);
}

int main()
{
       
        //设置RCC时钟
        *(unsigned int*)0x40021018 |= ((1)<<3);
       
        //配置GPIO-PB0输出
        *(unsigned int*)0x40010C00 |= ((1)<<(0*4));
        //配置GPIO-PB1输出
        *(unsigned int *)(0x40010c00) |= ((1) << (4*1));
        //配置GPIO-PB05输出
        *(unsigned int *)(0x40010c00) |= ((1) << (4*5));
       
        while(1)
        {
                //设置ODR寄存器
                *(unsigned int*)0X40010C0C &= ~(1<<0);
                delay(0XFFFF);
                delay(0XFFFF);
                *(unsigned int*)0X40010C0C |= (1<<0);
                delay(0XFFFF);
                delay(0XFFFF);

               
               
                *(unsigned int*)0X40010C0C &= ~(1<<1);
                delay(0XFFFF);
                delay(0XFFFF);
                *(unsigned int*)0X40010C0C |= (1<<1);
          delay(0XFFFF);
                delay(0XFFFF);               

                *(unsigned int*)0X40010C0C &= ~(1<<5);
                delay(0XFFFF);
                delay(0XFFFF);
                *(unsigned int*)0X40010C0C |= (1<<5);
          delay(0XFFFF);
                delay(0XFFFF);               

        }


}

void  SystemInit()
{
       
       
}
回复 支持 反对

使用道具 举报

发表于 2016-9-18 09:23:22 | 显示全部楼层
学习,学习
回复

使用道具 举报

发表于 2016-11-21 22:28:10 | 显示全部楼层

#include "stm32f10x.h"

void delay(unsigned int z)
{
        unsigned int x,y;
        for(x=z;x>0;x--)
        for(y=1200;y>0;y--);
}

int main()
{       
        // 开启GPIOB 端口时钟
        RCC_APB2ENR |= (1<<3);
        // 配置PB0为通用推挽输出,速度为10M
        GPIOB_CRL |= (1<<4*0);
        GPIOB_CRL |= (1<<1*4);
        GPIOB_CRL |= (1<<5*4);

        while(1)
        {
                GPIOB_ODR &=~(1<<0);
        delay(2000);
                GPIOB_ODR |= (1<<0);
        delay(2000);
                GPIOB_ODR &=~(1<<1);
        delay(2000);
                GPIOB_ODR |= (1<<1);
        delay(2000);
                GPIOB_ODR &=~(1<<5);
        delay(2000);
                GPIOB_ODR |= (1<<5);
        delay(2000);
        }
       

}



// 函数为空,目的是为了骗过编译器不报错
void SystemInit(void)
{       
}
再循环亮灯之前为什么会出现其他两种颜色,然后才开始红绿蓝循环
回复 支持 反对

使用道具 举报

发表于 2016-11-21 22:29:38 | 显示全部楼层
有没有大神指点下,实现灯光闪烁之前,会有其他两种颜色,亮完之后才开始进行循环亮灭
回复 支持 反对

使用道具 举报

发表于 2017-4-6 23:11:33 | 显示全部楼层
qq741931893 发表于 2016-8-1 18:41
交作业 水一下经验

谢谢这位兄弟了,今天流水灯调了好久都没找到问题,看到你这个程序,很快就找到问题了
回复 支持 反对

使用道具 举报

发表于 2017-4-7 17:37:42 | 显示全部楼层

//íaéè peripheral
#define PERIPH_BASE                    ((unsigned int )0x40000000)
#define APB1PERIPH_BASE                PERIPH_BASE
#define APB2PERIPH_BASE         (PERIPH_BASE + 0x10000)
#define AHBPERIPH_BASE                (PERIPH_BASE + 0x20000)

#define RCC_BASE            (AHBPERIPH_BASE + 0x1000)
#define GPIOB_BASE                        (APB2PERIPH_BASE + 0x0C00)

#define RCC_APB2ENR         *(unsigned int *)(RCC_BASE + 0x18)
       
#define GPIOB_CRL                        *(unsigned int *)(GPIOB_BASE + 0x00)
#define GPIOB_CRH                        *(unsigned int *)(GPIOB_BASE + 0x04)
#define GPIOB_ODR                        *(unsigned int *)(GPIOB_BASE + 0X0C)
#define GPIOB_BSRR                    *(unsigned int *)(GPIOB_BASE + 0x10)
#define GPIOB_BRR                        *(unsigned int *)(GPIOB_BASE + 0x14)
       
#include "stm32f10x.h"

void delay(unsigned int num)
{
        unsigned int i;
        for(;num>0;num--)
        for(i = 1000000;i>0;i--);
}

int main(void){
        #if 0
        //′ò&#191;aGPIO&#182;&#203;&#191;úμ&#196;ê±&#214;ó
        *(unsigned int *)0X40021018 |= (1<<3);
        //&#191;&#216;&#214;&#198;ODR&#188;&#196;′&#230;&#198;÷
        *(unsigned int *)0x40010c0c &= ~(1<<0);
       
        *(unsigned int *)0x40010c00 &= ~(0x0f<<(4*0));
        while(1)
        {
        //&#197;&#228;&#214;&#195;I0&#191;ú&#206;aê&#228;3&#246;
                *(unsigned int *)0x40010C00 |= (1<<(4*0));
                delay();
                *(unsigned int *)0x40010c00 &= ~(0x0f<<(4*0));
                delay();
        }
        //·&#189;·¨1
        RCC_APB2ENR  |= (1<<3);    //                ′ò&#191;aê±&#214;ó
       
        GPIOB_CRL &= ~(0x0f<<(4*0)); //&#199;&#229;á&#227;
        GPIOB_CRL |= (1<<(4*0));                //&#197;&#228;&#214;&#195;ê&#228;3&#246;
        while(1)
        {
                GPIOB_ODR &= ~(1<<0);                //&#191;&#216;&#214;&#198;ODR&#188;&#196;′&#230;&#198;÷
                delay();
                GPIOB_ODR |= (1<<0);
                delay();
        }
         
        //·&#189;·¨2
        RCC_APB2ENR  |= (1<<3);    //                ′ò&#191;aê±&#214;ó
       
        GPIOB_CRL &= ~(0x0f<<(4*1)); //&#199;&#229;á&#227;
        GPIOB_ODR &= ~(1<<1);                //&#191;&#216;&#214;&#198;ODR&#188;&#196;′&#230;&#198;÷
        while(1)
        {
                GPIOB_CRL |= (1<<(4*1));                //&#197;&#228;&#214;&#195;ê&#228;3&#246;
                delay(5);
                GPIOB_CRL &= ~(1<<(4*1));
                delay(5);
        }
       
        //·&#189;·¨3
        RCC_APB2ENR  |= (1<<3);    //                ′ò&#191;aê±&#214;ó
       
        GPIOB_CRL &= ~(0x0f<<(4*1)); //&#199;&#229;á&#227;
        GPIOB_ODR &= ~(1<<1);                //&#191;&#216;&#214;&#198;ODR&#188;&#196;′&#230;&#198;÷
        GPIOB_CRL |= (1<<(4*1));                //&#197;&#228;&#214;&#195;ê&#228;3&#246;
        while(1)
        {
                GPIOB_BSRR |= (1<<1);
                delay(1)
                GPIOB_BRR |= (1<<1);
                delay(1);
        }
       
       
        //·&#189;·¨4
        RCC_APB2ENR  |= (1<<3);    //                ′ò&#191;aê±&#214;ó
       
        GPIOB_CRL &= ~(0x0f<<(4*1)); //&#199;&#229;á&#227;
        GPIOB_ODR &= ~(1<<1);                //&#191;&#216;&#214;&#198;ODR&#188;&#196;′&#230;&#198;÷   
       
        GPIOB_BSRR |= (1<<1);   //°&#209;ODR1&#206;&#187;&#214;&#195;1  μ&#198;2&#187;áá
       
        while(1)
        {
                GPIOB_CRL |= (1<<(4*1));                //&#197;&#228;&#214;&#195;ê&#228;3&#246;
                delay(1);
                GPIOB_CRL &= ~(1<<(4*1));
                delay(1);
        }
        #else
        //·&#189;·¨3
        RCC_APB2ENR  |= (1<<3);    //                ′ò&#191;aê±&#214;ó
       
        GPIOB_CRL &= ~(0x0f<<(4*1)); //&#199;&#229;á&#227;
        GPIOB_ODR &= ~(1<<1);                //&#191;&#216;&#214;&#198;ODR&#188;&#196;′&#230;&#198;÷
        GPIOB_CRL |= (1<<(4*1));                //&#197;&#228;&#214;&#195;ê&#228;3&#246;
        while(1)
        {
                GPIOB_BSRR |= (1<<1);      //°&#209;ODR&#206;&#187;&#214;&#195;1
                delay(1);
                GPIOB_BRR |= (1<<1);                //°&#209;ODR&#206;&#187;&#214;&#195;0
                delay(1);
        }
        #endif
}

void SystemInit(void){
}
水一发  涨涨经验
回复 支持 反对

使用道具 举报

发表于 2017-10-1 23:17:12 | 显示全部楼层
五仁陷 发表于 2016-11-21 22:29
有没有大神指点下,实现灯光闪烁之前,会有其他两种颜色,亮完之后才开始进行循环亮灭

我也遇到这样的问题,一年过去了,你解决了吗
回复 支持 反对

使用道具 举报

发表于 2017-11-6 13:48:34 | 显示全部楼层
MrChen 发表于 2017-10-1 23:17
我也遇到这样的问题,一年过去了,你解决了吗

        *(unsigned int * )0x40021018 |=((1)<<3);
        *(unsigned int * )0x40010C00 |=((1)<<4*0);
        *(unsigned int * )0x40010C0C |=(1<<0);
        *(unsigned int * )0x40010C00 |=((1)<<4*1);
        *(unsigned int * )0x40010C0C |=(1<<1);
        *(unsigned int * )0x40010C00 |=((1)<<4*5);
        *(unsigned int * )0x40010C0C |=(1<<5);
回复 支持 反对

使用道具 举报

发表于 2018-3-28 21:34:47 | 显示全部楼层
rdzpy 发表于 2016-7-31 11:36
我也做了这个作业,但是无论仿真还是实际都不闪烁,以楼主的代码为例,经过反复尝试,在设置推挽输出的前面 ...

不是所有寄存器初始值都是0的,具体可以看数据参考手册,CRL和CRH的初始值是0x44444444,即每个端口默认的模式是浮空输入模式 微信截图_20180328213344.png
回复 支持 反对

使用道具 举报

发表于 2020-7-18 09:38:03 | 显示全部楼层
同样可以用比较笨的方法来实现对寄存器置位/复位操作       
//配置寄存器CRL来设置IO口工作模式(I/O)和工作速度,以 “位”为单位进行修改低四位为0010
        GPIOB_CRL &= ~(1<<3);//0;
        GPIOB_CRL &= ~(1<<2);//0;
        GPIOB_CRL |=  (1<<1);//1;
        GPIOB_CRL &= ~(1<<0);//0;
回复 支持 反对

使用道具 举报

发表于 2020-8-11 17:10:05 | 显示全部楼层
为什么我按照你的代码敲上去后,出现了
“main.c(25): error:  #22: invalid hexadecimal number
PIOB_ODR &=~(1<<0);”                        和
“main.c(25): error:  #18: expected a ")"        
PIOB_ODR &=~(1<<0);”
这两个错误
回复 支持 反对

使用道具 举报

发表于 2020-8-11 22:43:52 | 显示全部楼层
fire 发表于 2016-7-30 21:21
哎哟,不错哦。后面的视频我都会留作业,看看能不能都完成。

火哥,请问作业是指百度网盘的教学视频中的吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-2 02:21 , Processed in 0.045680 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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