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

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

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

  工程师应该掌握的STM32单片机关键基础精华,工程师STM32单片机学习基础手记(1):充分准备与开始编程,第2张

  这里写的是我的学习的过程,显然,很多时候会是不全面的,不系统的,感悟式的,甚至有时会是错误的,有些做法会是不专业的。那么,为什么我还要写呢?这是一个有趣的问题,它甚至涉及到博客为什么要存在的问题。显然,博客里面的写的东西,其正确性、权威性大多没法和书比,可为什么博客会存在呢?理由很多,我非专家,只说我的感慨。

  我们读武侠小说,总会有一些创出独门功夫的宗师,功夫极高,然后他的弟子则基本上无法超越他。我在想,这位宗师在创造他自己的独门功夫时,必然会有很多的次的曲折、弯路、甚至失败,会浪费他的很多时间,而他教给弟子时,则已去掉了这些曲折和弯路,当然更不会把失败教给弟子,按理说,效率应该更高,可是没用,弟子大都不如师。为什么呢?也许知识本身并不是最重要的,获取知识的过程才是最重要的?也许所谓的知识,并不仅仅是一条条的结论,而是附带着很多说不清道不明的东西?如植物的根,一条主根上必带有大量的小小的触须?

  闲话多了些,就权当前言了。下面准备开始。

  详情参阅: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的时钟构成了。

  相当的复杂。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/dianzi/2539481.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-05
下一篇 2022-08-05

发表评论

登录后才能评论

评论列表(0条)

保存