guoguoguo

    1. 关于APB1总线上设备的时钟问题? 13/8860 stm32/stm8 2010-11-17
                                       我把库函数中设置时钟的部分贴出来,您给看一下,谢谢! void SystemInit (void) {   /*!< RCC system reset(for debug purpose) */   /*!< Set HSION bit */   RCC->CR |= (uint32_t)0x00000001;   /*!< Reset SW[1:0], HPRE[3:0], PPRE1[2:0], PPRE2[2:0], ADCPRE[1:0] and MCO[2:0] bits */   RCC->CFGR &= (uint32_t)0xF8FF0000;     /*!< Reset HSEON, CSSON and PLLON bits */   RCC->CR &= (uint32_t)0xFEF6FFFF;   /*!< Reset HSEBYP bit */   RCC->CR &= (uint32_t)0xFFFBFFFF;   /*!< Reset PLLSRC, PLLXTPRE, PLLMUL[3:0] and USBPRE bits */   RCC->CFGR &= (uint32_t)0xFF80FFFF;   /*!< Disable all interrupts */   RCC->CIR = 0x00000000;       /*!< Configure the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers */   /*!< Configure the Flash Latency cycles and enable prefetch buffer */   SetSysClock(); } static void SetSysClock(void) { #ifdef SYSCLK_FREQ_HSE   SetSysClockToHSE(); #elif defined SYSCLK_FREQ_20MHz   SetSysClockTo20(); #elif defined SYSCLK_FREQ_36MHz   SetSysClockTo36(); #elif defined SYSCLK_FREQ_48MHz   SetSysClockTo48(); #elif defined SYSCLK_FREQ_56MHz   SetSysClockTo56();   #elif defined SYSCLK_FREQ_72MHz   SetSysClockTo72(); #endif /*!< If none of the define above is enabled, the HSI is used as System clock     source (default after reset) */ } static void SetSysClockTo72(void) {   __IO uint32_t StartUpCounter = 0, HSEStatus = 0;      /*!< SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/      /*!< Enable HSE */      RCC->CR |= ((uint32_t)RCC_CR_HSEON);   /*!< Wait till HSE is ready and if Time out is reached exit */   do   {     HSEStatus = RCC->CR & RCC_CR_HSERDY;     StartUpCounter++;     } while((HSEStatus == 0) && (StartUpCounter != HSEStartUp_TimeOut));   if ((RCC->CR & RCC_CR_HSERDY) != RESET)   {     HSEStatus = (uint32_t)0x01;   }   else   {     HSEStatus = (uint32_t)0x00;   }     if (HSEStatus == (uint32_t)0x01)   {     /*!< Enable Prefetch Buffer */     FLASH->ACR |= FLASH_ACR_PRFTBE;     /*!< Flash 2 wait state */     FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);     FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2;        /*!< HCLK = SYSCLK */     RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;            /*!< PCLK2 = HCLK */     RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;         /*!< PCLK1 = HCLK */     RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;         /*!< PLLCLK = 12MHz * 6 = 72 MHz */     RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL));     RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL9); //HSE输入,HSE二分频,倍频9 //        RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL6);     /*!< Enable PLL */     RCC->CR |= RCC_CR_PLLON;     /*!< Wait till PLL is ready */     while((RCC->CR & RCC_CR_PLLRDY) == 0)     {     }     /*!< Select PLL as system clock source */     RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));     RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;        /*!< Wait till PLL is used as system clock source */     while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08)     {     }   }   else   { /*!< If HSE fails to start-up, the application will have wrong clock          configuration. User can add here some code to deal with this error */        /*!< Go to infinite loop */     while (1)     {     }   } }
    2. 版主主:请教一个问题,谢谢!! 7/3278 stm32/stm8 2010-08-05
                                       
      R49 = 1M C7 , C8 ==20pF;
      这些参数是否与你选用的晶体匹配?
    3. 请教I2C超时处理 32/20403 stm32/stm8 2010-07-14
                                        第二:那个查询方式中还"残存"的那个while() I2C_GenerateStop(I2Cx, ENABLE); while((I2C10>CR1&0x200)==0x200); 第一句,通过软件写bit9@CR1,在总线上发出STOP信号;第二句,等待bit9@CR1被硬件清零。 为什么要加上第二句呢。有客户报告说STOP位在产生了STOP信号后不会被清零。 原因在于:按理说,软件置位了STOP位,一旦STOP信号出现在了总线上,该位应该被硬件自动清零。但是如果这两个事件之间,有一个写CR1的操作,而这个写操作是用读-修改-写的方式。那么读的时候,把还未清零的STOP也读了进来,随后又写了回去。这样STOP位就又被置位了。 总而言之,就是如果软件置位STOP位后有对CR1的写操作,最后要等到STOP位被清零后。 这里,后面是对SR的查询和设置(if(I2C_GetFlagStatus(I2Cx, I2C_FLAG_AF))...),并且直接返回错误代码,不要这个while()应该应该也可以。但是LZ的代码死在这里,说明STOP位确实没有清掉咯?按照LZ那样直接退出,那个STOP位还在,下次通信时会有问题的,除非手动把它清零。 另外多说一句,怎么会走到这里,是因为干扰使得不满足slave地址匹配的条件么。即I2C——CheckEvent(I2Cx, I2C_EVENT_MASTER_TRANSIMITTER_MODE_SELECTED)?然后在超时处理后,又由于干扰STOP位都不能清零? 我现在对干扰下的STM32 I2C不正常工作的情况很感兴趣呀,LZ多提供点反馈才好。
    4. 改了内存映射表,startup.s出错 5/3549 嵌入式系统 2010-05-19
      后来把 INCLUDE oemaddrtab_cfg.inc 放在 ENTRY_END 后面就可以通过了 不知道为什么,你不妨试试看
    5. 单片机如何检测一个模块输出的高电平 20/11154 嵌入式系统 2010-04-24
      顶。。。。不过真绕。。。。没明白想问什么。。。。。
    6. 求:基于单片机的点阵显示屏设计论文 3/3377 嵌入式系统 2010-04-24
      呵呵,不错的注意.
    7. 谁有学习遥控器的代码参考啊? 12/5381 嵌入式系统 2010-04-24
      能收到数据啊,可是去控制设备的时候就不行了?
    8. allegro倒是用了很久,但没用过FPM, 你启动PC试了吗? 建议卸载完重启下PC,然后重装,并看下任务管理器 里面是否有相关的进程。
    9. wince+S3C2440功耗问题 19/7918 嵌入式系统 2010-03-29
      学习~
    10. 关于IEC61850规约 4/3422 嵌入式系统 2010-03-12
      补充一点,我也不知道这个问题应该在哪个小论坛里发表。
    11.                                  0x6C00 0000    相当于给你的LCD脚RS 低电平   0x6C00 0001   相当于给你的LCD脚RS 高电平 然后看你的资料  RS  电平不同 操作的内容是不同的
    12. #define CLEAR11(x) (x = x & ~(0x1
    13. 恩,初学者路过看看。。。
    14. 51单片机 32/9851 嵌入式系统 2010-01-14
      是件好事
    15. 你的时序图里面半步接通的电流都是最小级别的。按datasheet里面最大级别的试试吧。 {0x3C, 0x24, 0x27, 0x20, 0x18, 0x00, 0x03, 0x04}正转
    16. C基础不行哦 不能在头文件里写函数的实现的。。。。。
    17. PIC16f877a 串口程序问题 4/6323 Microchip MCU 2009-11-03
      无语了。。。。。。。
    18. wince下EVDO拨号连接上了,但是无法上网!RAS 22/10663 嵌入式系统 2009-10-18
      从模块闪灯的情况,看起来是模块重启了, 拨号成功之后,指示灯快闪,大约0.5秒一次, 打开网页,输入网址,从调试信息上可以看出,网址信息已经发送出去了 但是过一会儿PPP协议数据就一直在重发数据,好像是通讯出了问题,这个时候我看到指示灯突然熄灭,过三秒钟左右继续闪灯,和查找信号时闪灯间隔相同,过一会儿就恢复到拨号后的闪灯间隔。 我怀疑过时电压不够,于是从台式机上接了一个USB电源,直接接到模块的电源脚上, 也是同样的情况 高手解答一下,谢谢
    19. 如何实现CE设备在PC上识别为U盘? 38/9231 嵌入式系统 2009-09-22
      你看下这个吧 http://blog.eeworld.net/nanjianhui/archive/2009/08/20/4466741.aspx
    20. 咨询看门狗问题 1/2826 嵌入式系统 2009-09-11
      两者可能一样也可能不一样。 代码对看门狗的功能设定不同,造成两者时间不一致。 1。代码上电运行后,正常运行状态下,不让狗复位,两者时间不同。 2。代码上电运行后,正常运行状态下,需要狗按时复位,两者时间一致。

最近访客

< 1/1 >

统计信息

已有80人来访过

  • 芯积分:--
  • 好友:--
  • 主题:7
  • 回复:61

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言