野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11565|回复: 18

交作业

[复制链接]
发表于 2016-8-1 21:07:08 | 显示全部楼层 |阅读模式

  1. #define PERIPH_BASE       0x40000000
  2. #define APB1PERIPH_BASE   PERIPH_BASE
  3. #define APB2PERIPH_BASE   (PERIPH_BASE + 0x10000)
  4. #define AHBPERIPH_BASE    (PERIPH_BASE + 0x20000)

  5. #define RCC_BASE          (AHBPERIPH_BASE + 0x1000)

  6. #define GPIOB_BASE        (APB2PERIPH_BASE + 0x0C00)
  7. #define GPIOE_BASE        (APB2PERIPH_BASE + 0x1800)

  8. #define RCC_APB2ENR       *(unsigned int *)(RCC_BASE + 0x18)
复制代码

回复

使用道具 举报

发表于 2016-8-1 21:35:45 | 显示全部楼层
大家好 我又来交作业了 交作业前 我有问题要问下         
函数        GPIOF_CRL &= ~( 0x0f << ( 4 * 7 )) ; 编译有警告 警告内容为   #61-D: integer operation result is out of range PIOF_CRL &= ~( 0x0f << ( 4 * 7 )) ;
总结:BRR 的优先级最低, BSRR次之 优先级最高 是ODR
这证实了GPIO内部硬件电路正确
打代码过程出现很多毛病 但通过对比火哥的视频例子 发现好多毛病都是因为自己不注意而引起的
比如有些没有加*(unsigned int*) 有些又加了 还有#define 时 后面的地址贴错了base地址 后来发现烧录没现象后才发现
还有GPIOF的基地址(APB2PERIPHE_BASE +        0x1c00) 但STM32官方中文手册上是+0x2000 上一节火哥已经讲过了 说中文手册的是错了 我敲代码的时候忘了后来也是调试的现象不对才找到原因
下面我贴我敲打的代码


  1. // STM32F103 头文件
  2. //peripherals 外围设备

  3. #define PERIPHE_BASE                                   ((unsigned int)0x40000000)
  4. #define APB1PERIPHE_BASE                         PERIPHE_BASE
  5. #define APB2PERIPHE_BASE                          (PERIPHE_BASE+ 0x10000)
  6. #define AHBPERIPHE_BASE                                 (PERIPHE_BASE+ 0x20000)

  7. #define RCC_BASE                                                (AHBPERIPHE_BASE + 0x1000)

  8. #define RCC_APB2ENR                                                *((unsigned int *)(RCC_BASE + 0x18))

  9. #define GPIOB_BASE                                                (APB2PERIPHE_BASE +        0x0c00)
  10. #define GPIOF_BASE                                                (APB2PERIPHE_BASE +        0x1c00)

  11. #define GPIOB_CRL                                                *((unsigned int *)(GPIOB_BASE + 0x00))
  12. #define GPIOB_CRH                                                *((unsigned int *)(GPIOB_BASE + 0x04))
  13. #define GPIOB_ODR                                                *((unsigned int *)(GPIOB_BASE + 0x0c))
  14. #define GPIOB_BSRR                                                *((unsigned int *)(GPIOB_BASE + 0x10))
  15. #define GPIOB_BRR                                                *((unsigned int *)(GPIOB_BASE + 0x14))

  16. #define GPIOF_CRL                                                *((unsigned int *)(GPIOF_BASE + 0x00))
  17. #define GPIOF_CRH                                                *((unsigned int *)(GPIOF_BASE + 0x04))
  18. #define GPIOF_ODR                                                *((unsigned int *)(GPIOF_BASE + 0x0c))
  19. #define GPIOF_BSRR                                                *((unsigned int *)(GPIOF_BASE + 0X10))
  20. #define GPIOF_BRR                                                *((unsigned int *)(GPIOF_BASE + 0X14))

  21. #include "stm32f10x.h"
  22. /* 置位1 用 x |=  ( 1 << n)  
  23.    清零0 用 x &= ~( 1 << n) */

  24. int main (void)
  25. {
  26.                 /* 开启GPIOB 的时钟*/
  27.                 RCC_APB2ENR |=        (1 << 3);
  28.         
  29.                 /* 开启GPIOF 的时钟*/
  30.                 RCC_APB2ENR |=        (1 << 7);
  31.         
  32.                 /* 配置GPIOB0 的输出模式 */
  33.                 GPIOB_CRL &= ~(0x0f << ( 4 * 0) );//先对端口4个位清零
  34.                 GPIOB_CRL |=  (0x01 << ( 4 * 0) );
  35.         
  36.                 /* 配置GPIOB1 的输出模式 */
  37.                 GPIOB_CRL &= ~(0x0f << (4 * 1));
  38.                 GPIOB_CRL |=  (0x01 << (4 * 1));
  39.         
  40.                 /* 配置GPIOB5 的输出模式 */
  41.                 GPIOB_CRL &= ~(0x0f << (4 * 5));
  42.                 GPIOB_CRL |= (0x01 << (4 * 5));
  43.         
  44.                 /* 配置GPIOF7 的输出模式 */
  45.                 GPIOF_CRL &= ~( 0x0f << ( 4 * 7 )) ;
  46.                 GPIOF_CRL |= ( 0x01 << (4 * 7)) ;
  47.                
  48.                 /* 配置GPIOF8 的输出模式 */
  49.                 GPIOF_CRH &= ~( 0x0f << ( 4 * 0 )) ;
  50.                 GPIOF_CRH |= ( 0x01 << (4 * 0)) ;
  51.         
  52.         
  53.                 /* 配置GPIOB0 的输出状态(0 或 1) */
  54. //                GPIOB_ODR |= ( 1 << 0);
  55.                 GPIOB_ODR &= ~( 1 << 0) ;
  56.                
  57.                 /* 配置GPIOB1 的输出状态(0 或 1) */
  58. //                GPIOB_ODR |=  ( 1 << 1) ;
  59.                 GPIOB_ODR &=  ~( 1 << 1) ;
  60.                
  61.                 /* 配置GPIOB5 的输出状态(0 或 1) */
  62. //                GPIOB_ODR |=  (1 << 5) ;
  63.                 GPIOB_ODR &=  ~( 1 << 5) ;
  64.                
  65.                 /* 配置GPIOF7 的输出状态(0 或 1) */
  66. //                GPIOF_ODR |= ( 1 << 7);
  67.                 GPIOF_ODR &= ~( 1 << 7);
  68.                
  69.                 /* 配置GPIOF8 的输出状态(0 或 1) */
  70. //                GPIOF_ODR |= ( 1 << 8);
  71.                 GPIOF_ODR &= ~( 1 << 8);
  72.                
  73.                 /* 使用 GPIOx_BSRR        使用GPIOF端口 7 高16位清0 低16位置1 */  
  74.                 GPIOF_BSRR |= ( 1 << 7); //设置为1
  75. //                GPIOF_BSRR |= ( 1 << 7 << 16 ); //设置为0 点亮LED
  76.                 /* 使用 GPIOx_BSRR        使用GPIOB端口 1 */
  77.                 GPIOB_BSRR |= ( 1 << 1) ;
  78. //                GPIOB_BSRR |= ( 1 << 1 << 16) ;
  79.         
  80.                 /*  使用 GPIOx_BRR 使用GPIOF 端口 8  和 GPIOB 端口5
  81.                         低16位清0 没有高16位 */
  82.                 GPIOF_BRR |= ( 1 << 8) ;
  83.                 GPIOB_BRR |= ( 1 << 5) ;

  84.         while(1);
  85. }
复制代码



回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-1 21:43:32 | 显示全部楼层
qq741931893 发表于 2016-8-1 21:35
大家好 我又来交作业了 交作业前 我有问题要问下        
函数        GPIOF_CRL &= ~( 0x0f

如果你的错误代码是直接复制过来的话,我想你可能是代码写错了:PIOF_CRL,是不是前面少了个G?
回复 支持 反对

使用道具 举报

发表于 2016-8-1 21:49:25 | 显示全部楼层
qq741931893 发表于 2016-8-1 21:35
大家好 我又来交作业了 交作业前 我有问题要问下        
函数        GPIOF_CRL &= ~( 0x0f

好扎实的基础,加油!!!!
回复 支持 反对

使用道具 举报

发表于 2016-8-1 21:56:58 来自手机 | 显示全部楼层
qq741931893 发表于 2016-8-1 21:35
大家好 我又来交作业了 交作业前 我有问题要问下        
函数        GPIOF_CRL &= ~( 0x0f

作业太长,明天上班再看看
回复 支持 反对

使用道具 举报

发表于 2016-8-1 21:59:19 来自手机 | 显示全部楼层
qq741931893 发表于 2016-8-1 21:35
大家好 我又来交作业了 交作业前 我有问题要问下        
函数        GPIOF_CRL &= ~( 0x0f

你这个是不是看了我下午的视频完成的作业,不错啊。
回复 支持 反对

使用道具 举报

发表于 2016-8-1 22:00:51 来自手机 | 显示全部楼层
正确,下次贴代码的时候记得用代码格式,发帖的时候有的选。
回复 支持 反对

使用道具 举报

发表于 2016-8-1 22:01:34 来自手机 | 显示全部楼层
火哥哥 发表于 2016-8-1 21:49
好扎实的基础,加油!!!!

这个是今天视频的作业,实现GPIO其他寄存器的映射。
回复 支持 反对

使用道具 举报

发表于 2016-8-1 22:01:46 | 显示全部楼层
rdzpy 发表于 2016-8-1 21:43
如果你的错误代码是直接复制过来的话,我想你可能是代码写错了:PIOF_CRL,是不是前面少了个G?

不是 这个是 这个是这样的 警告信息和 后面的函数有个隔行的 我也不知道为什么少了个G呢 但之后的编译又没有出现错误了 就是第一个编译的时候有警告 第二个就没出现警告 我也奇怪
#61-D: integer operation result is out of range

PIOF_CRL &= ~( 0x0f << ( 4 * 7 )) ;
回复 支持 反对

使用道具 举报

发表于 2016-8-1 22:02:08 | 显示全部楼层
火哥哥 发表于 2016-8-1 21:49
好扎实的基础,加油!!!!

谢谢支持 我会努力的
回复 支持 反对

使用道具 举报

发表于 2016-8-1 22:02:42 | 显示全部楼层
fire 发表于 2016-8-1 21:59
你这个是不是看了我下午的视频完成的作业,不错啊。

看完就做作业 巩固学习内容 加深学习印象
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-1 22:06:44 | 显示全部楼层
咦,才发现,我的作业居然被吃了一大半。。。
回复 支持 反对

使用道具 举报

发表于 2016-8-1 22:10:14 | 显示全部楼层
fire 发表于 2016-8-1 22:01
这个是今天视频的作业,实现GPIO其他寄存器的映射。

哦哦哦,火哥,今天我在看你的F429串口讲解,还没来的急看你刚上传的视频,我怕了一拍
回复 支持 反对

使用道具 举报

发表于 2016-8-1 22:12:36 | 显示全部楼层
火哥哥 发表于 2016-8-1 22:10
哦哦哦,火哥,今天我在看你的F429串口讲解,还没来的急看你刚上传的视频,我怕了一拍

看F429串口部分,有两个疑惑,我发帖子,火哥,你们都去看看
回复 支持 反对

使用道具 举报

发表于 2016-8-1 22:31:42 来自手机 | 显示全部楼层
rdzpy 发表于 2016-8-1 22:06
咦,才发现,我的作业居然被吃了一大半。。。

是啊,只是几个总线的宏定义。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-2 18:17:11 | 显示全部楼层
今天在外面忙了一天,现在补交昨天被吃了的作业:

  1. #define PERIPH_BASE       0x40000000
  2. #define APB1PERIPH_BASE   PERIPH_BASE
  3. #define APB2PERIPH_BASE   (PERIPH_BASE + 0x10000)
  4. #define AHBPERIPH_BASE    (PERIPH_BASE + 0x20000)

  5. #define RCC_BASE          (AHBPERIPH_BASE + 0x1000)

  6. #define GPIOB_BASE        (APB2PERIPH_BASE + 0x0C00)
  7. #define GPIOE_BASE        (APB2PERIPH_BASE + 0x1800)

  8. #define RCC_APB2ENR       *(unsigned int *)(RCC_BASE + 0x18)
  9.        
  10. #define GPIOB_CRL         *(unsigned int *)(GPIOB_BASE + 0x00)
  11. #define GPIOB_CRH         *(unsigned int *)(GPIOB_BASE + 0x04)
  12. #define GPIOB_ODR         *(unsigned int *)(GPIOB_BASE + 0x0C)
  13. #define GPIOB_BSRR        *(unsigned int *)(GPIOB_BASE + 0x10)
  14. #define GPIOB_BRR         *(unsigned int *)(GPIOB_BASE + 0x14)
  15.        
  16. #define GPIOE_CRL         *(unsigned int *)(GPIOE_BASE + 0x00)
  17. #define GPIOE_CRH         *(unsigned int *)(GPIOE_BASE + 0x04)
  18. #define GPIOE_ODR         *(unsigned int *)(GPIOE_BASE + 0x0C)
  19. #define GPIOE_BSRR        *(unsigned int *)(GPIOE_BASE + 0x10)
  20. #define GPIOE_BRR         *(unsigned int *)(GPIOE_BASE + 0x14)


  21. int main(void)
  22. {
  23.         unsigned long i;
  24.         RCC_APB2ENR |= ((1)<<6);
  25.         RCC_APB2ENR |= ((1)<<3);
  26.         GPIOE_CRL &= ~((0x0F)<<(4*5));
  27.         GPIOB_CRL &= ~((0x0F)<<(4*5));
  28.         GPIOB_CRL |= ((0x03)<<(4*5));
  29.         GPIOE_CRL |= ((0x03)<<(4*5));
  30.        
  31.         while(1)
  32.         {
  33. //                GPIOB_ODR &= ~((1)<<5);
  34. //                GPIOE_ODR |= ((1)<<5);
  35. //                for(i=200000;i>0;i--);
  36. //                GPIOB_ODR |= ((1)<<5);
  37. //                GPIOE_ODR &= ~((1)<<5);
  38. //                for(i=200000;i>0;i--);
  39.                
  40.                 GPIOB_BSRR |= ((1)<<5);
  41.                 GPIOE_BRR |= ((1)<<5);
  42.                 for(i=200000;i>0;i--);
  43.                 GPIOB_BRR |= ((1)<<5);
  44.                 GPIOE_BSRR |= ((1)<<5);
  45.                 for(i=200000;i>0;i--);
  46.         }
  47. }

  48. void SystemInit(void)
  49. {

  50. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2016-8-2 18:37:22 | 显示全部楼层
这基础不错啊,进步很快
回复 支持 反对

使用道具 举报

发表于 2016-8-2 18:38:12 | 显示全部楼层
这学习动力值得称赞啊,看来我今晚得通宵了,不然都跟不上大家伙的进度了
回复 支持 反对

使用道具 举报

发表于 2016-8-2 18:38:30 | 显示全部楼层
前排 占位,过几天我也交作业了
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 06:31 , Processed in 0.063975 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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