首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

工程师应该掌握的STM32单片机关键基础精华

工程师应该掌握的STM32单片机关键基础精华

从51开始,单片机玩了很长时间了,有51,PIC,AVR等等,早就想跟潮流玩玩ARM,但一直没有开始,原因-----不知道玩了ARM可以做什么(对我自己而言)。如果为学习而学习,肯定学不好。然后cortex-m3出来了,据说,这东西可以替代单片机,于是马上开始关注。也在第一时间开始学习,可惜一开始就有点站错了队,选错了型(仍是对我自己而言)。我希望这种芯片应该是满大街都是,随便哪里都可以买得到,但我选的第一种显然做不到。为此,大概浪费了一年多时间吧,现在,回到对我来说是正确的道路上来啦,边学边写点东西。

  

  这里写的是我的学习的过程,显然,很多时候会是不全面的,不系统的,感悟式的,甚至有时会是错误的,有些做法会是不专业的。那么,为什么我还要写呢?这是一个有趣的问题,它甚至涉及到博客为什么要存在的问题。显然,博客里面的写的东西,其正确性、权威性大多没法和书比,可为什么博客会存在呢?理由很多,我非专家,只说我的感慨。
  我们读武侠小说,总会有一些创出独门功夫的宗师,功夫极高,然后他的弟子则基本上无法超越他。我在想,这位宗师在创造他自己的独门功夫时,必然会有很多的次的曲折、弯路、甚至失败,会浪费他的很多时间,而他教给弟子时,则已去掉了这些曲折和弯路,当然更不会把失败教给弟子,按理说,效率应该更高,可是没用,弟子大都不如师。为什么呢?也许知识本身并不是最重要的,获取知识的过程才是最重要的?也许所谓的知识,并不仅仅是一条条的结论,而是附带着很多说不清道不明的东西?如植物的根,一条主根上必带有大量的小小的触须?
  闲话多了些,就权当前言了。下面准备开始。
  详情参阅:STM32单片机小Tips(1):充分准备与开始编程

  

  勉勉强强看懂一行程序
  继续学习中,先把开发板自带一个例子做了些精简,以免看得吓人。。。。
  就是这个,让PORTD上接的4个LED分别点亮。
  开始研究代码
  int main(void)
  {
  Init_All_Periph();
  。。。。。。
  看到这一行,开始跟踪,于是又看到了下面的内容
  void Init_All_Periph(void)
  {
  RCC_Configuration();
  。。。。。。
  继续跟踪
  void RCC_Configuration(void)
  {
  SystemInit();
  。。。。。。
  这行代码在system_stm32f10x.c中找到了。
  void SystemInit (void)
  {
  /* Reset the RCC clock configuration to the default reset state(for debug purpose) */
  /* Set HSION bit */
  RCC-》CR |= (uint32_t)0x00000001;
  /* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */
  #ifndef STM32F10X_CL
  RCC-》CFGR &= (uint32_t)0xF8FF0000;
  #else
  RCC-》CFGR &= (uint32_t)0xF0FF0000;
  #endif /* STM32F10X_CL */
  /* Reset HSEON, CSSON and PLLON bits */
  RCC-》CR &= (uint32_t)0xFEF6FFFF;
  /* Reset HSEBYP bit */
  RCC-》CR &= (uint32_t)0xFFFBFFFF;
  /* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */
  RCC-》CFGR &= (uint32_t)0xFF80FFFF;
  #ifndef STM32F10X_CL
  /* Disable all interrupts and clear pending bits */
  RCC-》CIR = 0x009F0000;
  #else
  /* Reset PLL2ON and PLL3ON bits */
  RCC-》CR &= (uint32_t)0xEBFFFFFF;
  /* Disable all interrupts and clear pending bits */
  RCC-》CIR = 0x00FF0000;
  /* Reset CFGR2 register */
  RCC-》CFGR2 = 0x00000000;
  #endif /* STM32F10X_CL */
  /* Configure the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers */
  /* Configure the Flash Latency cycles and enable prefetch buffer */
  SetSysClock();
  }
  这一长串的又是什么,如何来用呢?看来,偷懒是不成的了,只能回过头去研究STM32的时钟构成了。
  相当的复杂。
返回列表