你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32G474时钟设置笔记(170MHz)

[复制链接]
STMCU 发布时间:2020-9-18 10:46
编写基础RCC(Reset and Clock Control)



AHB、APB1、APB2最大频率都是170MHz。






时钟树

要想配置时钟首先必须要看明白时钟树。




PLL

配置时钟精髓就是PLL倍频,因此搞清楚了它就很好解决了。


手册上对PLL配置步骤如下图:


1_meitu_1.jpg

首先通过上面的时钟树也可以看出来PLL的时钟源有两种:HSI、HSE。PLL的分频、倍频配置在RCC_PLLCFGR寄存器中。
配置PLL的过程是:



  • 将RCC_CR的PLLON位清零来关闭PLL。
  • 查询RCC_CR的PLLRDY是否被清零了,如果该位为0说明PLL已经关闭。
  • 配置分频、倍频系数等(单纯的使能或者关闭PLL_P、PLL_Q或者PLL_R不需要这些步骤,直接操作即可)。
  • 将PLLON设置为1,再次启用PLL。
  • 通过在RCC_PLLCFGR寄存器中配置PLLPEN、PLLQEN、PLLREN来启用所需的PLL输出。 注:PLL输出频率不得大于170MHz。 当一个时钟源被直接使用或通过PLL作为一个系统时钟,是不可能停止它。



PWR

在不同的工作频率下,对应的电源模式也不一样。


可能是为了满足不同频率下的功耗管理,高时钟对应高内核电压,我使用TI的5529时也有倍频时修改内核电压的的操作。
g474的电源模式与各个时钟频率对应关系如下表:


2_meitu_2.jpg



PWR_CR1的VOS[1:0]对应Range2和Range1:





至于Range1的normal模式和boost模式是在PWR_CR5寄存器的R1MODE位配置,R1MODE为0就是boost模式:





g474的R1MODE位与SYSCLK的对应关系如下:





手册中还介绍了从range_normal切换到range_boost模式的步骤:


3_meitu_3.jpg




  • 在切换到更高的系统频率之前,系统时钟必须用AHB分频器除以2。
  • 清除的R1MODE位在PWR_CR5寄存器中。
  • 在range1 boost模式中,根据新的频率目标调整等待状态的数量。
  • 配置并切换到新的系统频率。
  • 等待至少1us,然后重新配置AHB预压器以获得所需的HCLK时钟频率



FLASH

这个是我原来忽略的地方,原来就配置了PLL和PWR,然后倍频到140MHz就是极限了,后来我反复查阅手册,才发现了原来少了对FLASH的访问比率的配置。(可以看到上面的range_normal切换到range_boost模式步骤里已经提到了修改FLASH访问比率的事,但是由于没看懂是什么意思,还以为是延时1us,因此配置170MHz时候就失败了。)


上面提到range_normal切换到range_boost步骤里有这么一句:


  • 在range1 boost模式中,根据新的频率目标调整等待状态的数量(FLASH_ACR的LATENCY位)。

那么就看看这个 FLASH_ACR 的 LATENCY到底是个什么。


查阅手册找到这个寄存器:





可以看到LATENCY在最低位:


5_meitu_5.jpg




LATENCY[3:0]:这些位表示SYSCLK(系统时钟)周期与Flash访问时间的比率。


知道了它是干嘛的,那么它到底设置为多少合适呢?如下图所示:


6_meitu_6.jpg



为了正确地从闪存读取数据,等待状态(延迟)的数量必须根据CPU时钟(HCLK)的频率和内部电压范围的设备VCORE被正确地编程在闪存访问控制寄存器(FLASH_ACR)。参考第6.1.5节:动态电压缩放管理。表29显示了等待状态和CPU时钟频率之间的对应关系。


对号入座,我要设置为170MHz,模式为Range 1 Boost模式,那么对应LATENCY值应该为4WS,因此将其配置为4。


FLASH->ACR |= FLASH_ACR_LATENCY_4WS;


配置函数

有了上面的概念就可以进行编写时钟函数了。
步骤如下:


  • 开启HSE(鄙人的板子HSE为8MHz)并确认HSE就绪;
  • 关闭PLL并确认PLL已经关闭;
  • AHB二分频;
  • 配置为range1_boost(默认复位为range1_normal模式);
  • 配置FLASH_ACR的访问时间比率;
  • 配置PLL;
  • 打开PLL并确认PLL就绪;
  • 使能PLL_R;
  • 配置系统时钟为PLL输入,并确认系统时钟就绪;
  • 延时至少1us后切换AHB为不分频。


  1. u8 SYSCLK_140MHz(void)
  2. {
  3.         u16 temp = 0x2000;
  4.         RCC->CR |= RCC_CR_HSEON;//打开HSE
  5.         while((!(RCC->CR & RCC_CR_HSERDY))&&(--temp));//等待HSE就绪
  6.         if(!temp)//检查是否超时
  7.         {
  8.                 return FAILED;
  9.         }
  10.         RCC->CR &= ~RCC_CR_PLLON;//关闭PLL
  11.         temp = 0x2000;
  12.         while((RCC->CR & RCC_CR_PLLRDY) && (--temp));//等待PLL下线
  13.         if(!temp)//检查是否超时
  14.         {
  15.                 return FAILED;
  16.         }
  17.         RCC->CFGR = RCC_CFGR_PPRE2_DIV2|RCC_CFGR_PPRE1_DIV4|RCC_CFGR_HPRE_DIV2|RCC_CFGR_SW_HSI;
  18.         //系统时钟选择内部高速时钟,AHB二分频,APB1四分频,APB2二分频
  19.         temp = 0x2000;
  20.         while(--temp);//等待AHB稳定
  21.         PWR->CR5 &= ~PWR_CR5_R1MODE;//设置为range1_boost模式
  22.         FLASH->ACR &= ~FLASH_ACR_LATENCY;//清除LATENCY
  23.         FLASH->ACR |= FLASH_ACR_LATENCY_4WS;//配置LATENCY为4WS
  24.         temp = 0x2000;
  25.         while(--temp);//等待系统稳定
  26.         RCC->PLLCFGR = (70<<RCC_PLLCFGR_PLLN_Pos)|(1<<RCC_PLLCFGR_PLLM_Pos)|RCC_PLLCFGR_PLLSRC_HSE;//(8*70)/2 = VCO = 280MHz
  27.         RCC->CR |= RCC_CR_PLLON;//打开PLL
  28.         temp = 0xf000;
  29.         while((!(RCC->CR & RCC_CR_PLLRDY)) && (--temp));//等待PLL准备就绪
  30.         if(!temp)
  31.         {
  32.                 return FAILED;
  33.         }
  34.         RCC->PLLCFGR |= RCC_PLLCFGR_PLLREN;//使能PLL_R
  35.         RCC->CFGR |= RCC_CFGR_SW_PLL;//设置系统时钟选择PLL
  36.         temp = 0xf000;
  37.         while(((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS) && (--temp));//等待系统设置PLL主时钟完成标志位置位
  38.         if(temp)
  39.         {
  40.                 temp = 0;
  41.                 while(--temp);//等待系统稳定
  42.                 RCC->CFGR &= ~RCC_CFGR_HPRE;//AHB 不分频 == SYSCLK
  43.                 return SUCCEED;
  44.         }
  45.         else
  46.         {
  47.                 return FAILED;
  48.         }        
  49. }
复制代码


然后就配置结束了,通过定时器验证确实为170MHz。



附录:RCC寄存器

最后:


附上本人写的寄存器配置,方便个人配置,要啥直接删注释就好:


  1. //================================RCC->CR========================================
  2.         RCC->CR |= 0                //default: 0x0000 0063
  3.         //        //RCC_CR_PLLRDY                //bit25【read only】:        PLL Ready
  4.         //        |RCC_CR_PLLON                //bit24: 使能PLL。
  5.         //        |RCC_CR_CSSON                //bit19: 时钟安全系统使能。0 OFF ; 1 ON
  6.         //        |RCC_CR_HSEBYP                //bit18: 0 HSE晶振不旁路        1 HSE晶振旁路
  7.         //        //RCC_CR_HSERDY                //bit17【read only】:        HSE Ready
  8.                 |RCC_CR_HSEON                //bit16: 使能HSE
  9.         //        |RCC_CR_HSIRDY                //bit10: HSI16时钟准备就绪
  10.         //        |RCC_CR_HSIKERON        //bit09: 停止模式HSI是否启动
  11.         //        |RCC_CR_HSION                //bit08: 1 HSION   0 OFF
  12.         ;

  13. //================================RCC->PLLCFGR ========================================
  14.         RCC->PLLCFGR = 0                //default: 0x0000 1000
  15.         //        |RCC_PLLCFGR_PLLPDIV        //bit31-27[4:0]: P 分频 给ADC用
  16.                                                                 // 00000: PLL “P” clock is controlled by the bit PLLP
  17.                                                                 // 00001: Reserved.
  18.                                                                 // 00010: PLL “P” clock = VCO / 2
  19.                                                                 // ....
  20.                                                                 // 11111: PLL “P” clock = VCO / 31
  21.         //        |RCC_PLLCFGR_PLLR                //bit26-25[1:0]: 锁相环R 分频
  22.                                                         ///        // 00: PLLR = 2
  23.                                                                 // 01: PLLR = 4
  24.                                                                 // 10: PLLR = 6
  25.                                                                 // 11: PLLR = 8
  26.         //        |RCC_PLLCFGR_PLLREN                //bit24: PLLR使能
  27.         //        |RCC_PLLCFGR_PLLQ_0                //bit22-21[1:0]: Q分频,USB用。分频参数与R分频一样
  28.         //        |RCC_PLLCFGR_PLLQEN                //bit20: PLLQ使能
  29.         //        |RCC_PLLCFGR_PLLP                //bit17: P 分频
  30.                                                                 // 0: PLLP = 7
  31.                                                                 // 1: PLLP = 17
  32.         //        |RCC_PLLCFGR_PLLPEN                //bit16: PLLP 使能
  33.         //----------------------- VCO = 280MHz
  34.                 |(70<<RCC_PLLCFGR_PLLN_Pos)//bit14-08[6:0]: PLL的倍频 不能小于8
  35.                                                                 // 0000000: PLLN = 0 wrong configuration
  36.                                                                 // 0000001: PLLN = 1 wrong configuration
  37.                                                                 // ...
  38.                                                                 // 0000111: PLLN = 7 wrong configuration
  39.                                                                 // 0001000: PLLN = 8
  40.                                                                 // 0001001: PLLN = 9
  41.                                                                 // ...
  42.                                                                 // 1111111: PLLN = 127
  43.                 |(1<<RCC_PLLCFGR_PLLM_Pos)//bit07-04[3:0]: PLL初始分频
  44.                                                                 // 0000: PLLM = 1
  45.                                                         ///        // 0001: PLLM = 2
  46.                                                                 // 0010: PLLM = 3
  47.                                                                 // 0011: PLLM = 4
  48.                                                                 // 0100: PLLM = 5
  49.                                                                 // 0101: PLLM = 6
  50.                                                                 // 0110: PLLM = 7
  51.                                                                 // 0111: PLLM = 8
  52.                                                                 // 1000: PLLSYSM = 9
  53.                                                                 // ...
  54.                                                                 // 1111: PLLSYSM= 16
  55.                 |RCC_PLLCFGR_PLLSRC                //bit01-00[1:0]: PLL时钟源选择。
  56.                                                                 // 00: No clock sent to PLL
  57.                                                                 // 01: No clock sent to PLL
  58.                                                                 // 10: HSI16 clock selected as PLL clock entry
  59.                                                         ///        // 11: HSE clock selected as PLL clock entry
  60.         ;

  61. //================================RCC->CFGR========================================
  62.         RCC->CFGR = 0                        //default: 0x0000 0005
  63.         //        |RCC_CFGR_MCOPRE                //bit30-28[2:0]: MCO输出时钟分频
  64.                                                                 // 000: MCO is divided by 1
  65.                                                                 // 001: MCO is divided by 2
  66.                                                                 // 010: MCO is divided by 4
  67.                                                                 // 011: MCO is divided by 8
  68.                                                                 // 100: MCO is divided by 16
  69.                                                                 // Others: not allowed
  70.         //        |RCC_CFGR_MCOSEL                //bit27-24[3:0]: MCO输出时钟选择
  71.                                                                 // 0000: MCO output disabled, no clock on MCO
  72.                                                                 // 0001: SYSCLK system clock selected
  73.                                                                 // 0010: Reserved, must be kept at reset value
  74.                                                                 // 0011: HSI16 clock selected
  75.                                                                 // 0100: HSE clock selected
  76.                                                                 // 0101: Main PLL clock selected
  77.                                                                 // 0110: LSI clock selected
  78.                                                                 // 0111: LSE clock selected
  79.                                                                 // 1000: Internal HSI48 clock selected
  80.                 |RCC_CFGR_PPRE2_DIV2        //bit13-11[2:0]: APB2预分频
  81.                                                                 // 0xx: HCLK not divided
  82.                                                                 // 100: HCLK divided by 2
  83.                                                                 // 101: HCLK divided by 4
  84.                                                                 // 110: HCLK divided by 8
  85.                                                                 // 111: HCLK divided by 16
  86.                 |RCC_CFGR_PPRE1_DIV4        //bit10-08[2:0]: APB1预分频
  87.                                                                 // 0xx: HCLK not divided
  88.                                                                 // 100: HCLK divided by 2
  89.                                                                 // 101: HCLK divided by 4
  90.                                                                 // 110: HCLK divided by 8
  91.                                                                 // 111: HCLK divided by 16
  92.         //        |RCC_CFGR_HPRE                        //bit07-04[3:0]: AHB预分频(改变core电压之前应该先查看这些时钟频率)
  93.                                                                 // 0xxx: SYSCLK not divided
  94.                                                                 // 1000: SYSCLK divided by 2
  95.                                                                 // 1001: SYSCLK divided by 4
  96.                                                                 // 1010: SYSCLK divided by 8
  97.                                                                 // 1011: SYSCLK divided by 16
  98.                                                                 // 1100: SYSCLK divided by 64
  99.                                                                 // 1101: SYSCLK divided by 128
  100.                                                                 // 1110: SYSCLK divided by 256
  101.                                                                 // 1111: SYSCLK divided by 512
  102.         //RCC_CFGR_SWS                        //bit03-02[1:0]【read only】:系统时钟源选择状态,该位与SW对应。
  103.                 |RCC_CFGR_SW                //bit01-00[1:0]: 系统时钟源选择。
  104.                                                                 // 00: Reserved, must be kept at reset value
  105.                                                                 // 01: HSI16 selected as system clock
  106.                                                                 // 10: HSE selected as system clock
  107.                                                         ///        // 11: PLL selected as system clock
  108.         ;
复制代码

下面是RCC寄存器:



  1. void RCC_Init(void)
  2. {
  3.         //--------------------------------------------------------------------------------------//
  4.         //---------------------------------------- AHB1 ----------------------------------------//
  5.         //--------------------------------------------------------------------------------------//
  6.         RCC->AHB1RSTR |= 0                        //default: 0x0000 0000
  7.         //        |RCC_AHB1RSTR_CRCRST                //bit12
  8.         //        |RCC_AHB1RSTR_FLASHRST                //bit08
  9.         //        |RCC_AHB1RSTR_FMACRST                //bit04
  10.         //        |RCC_AHB1RSTR_CORDICRST                //bit03
  11.         //        |RCC_AHB1RSTR_DMAMUX1RST        //bit02
  12.         //        |RCC_AHB1RSTR_DMA2RST                //bit01
  13.         //        |RCC_AHB1RSTR_DMA1RST                //bit00
  14.         ;
  15.         RCC->AHB1RSTR &= 0xffffffff        //default: 0x0000 0000
  16.         //        &~RCC_AHB1RSTR_CRCRST                //bit12
  17.         //        &~RCC_AHB1RSTR_FLASHRST                //bit08
  18.         //        &~RCC_AHB1RSTR_FMACRST                //bit04
  19.         //        &~RCC_AHB1RSTR_CORDICRST        //bit03
  20.         //        &~RCC_AHB1RSTR_DMAMUX1RST        //bit02
  21.         //        &~RCC_AHB1RSTR_DMA2RST                //bit01
  22.         //        &~RCC_AHB1RSTR_DMA1RST                //bit00
  23.         ;
  24.         
  25.         RCC->AHB1ENR |= 0                        //default: 0x0000 0100
  26.         //        |RCC_AHB1ENR_CRCEN                        //bit12
  27.         //        |RCC_AHB1ENR_FLASHEN                //bit08
  28.         //        |RCC_AHB1ENR_FMACEN                        //bit04
  29.         //        |RCC_AHB1ENR_CORDICEN                //bit03
  30.         //        |RCC_AHB1ENR_DMAMUX1EN                //bit02
  31.         //        |RCC_AHB1ENR_DMA2EN                        //bit01
  32.         //        |RCC_AHB1ENR_DMA1EN                        //bit00
  33.         ;
  34.         //--------------------------------------------------------------------------------------//
  35.         //---------------------------------------- AHB2 ----------------------------------------//
  36.         //--------------------------------------------------------------------------------------//
  37.         RCC->AHB2RSTR |= 0                        //defualt: 0x0000 0000
  38.         //        |RCC_AHB2RSTR_RNGRST                //bit26
  39.         //        |RCC_AHB2RSTR_RNGRST                //bit24
  40.         //        |RCC_AHB2RSTR_DAC4RST                //bit19
  41.         //        |RCC_AHB2RSTR_DAC3RST                //bit18
  42.         //        |RCC_AHB2RSTR_DAC2RST                //bit17
  43.         //        |RCC_AHB2RSTR_DAC1RST                //bit16
  44.         //        |RCC_AHB2RSTR_ADC345RST                //bit14
  45.         //        |RCC_AHB2RSTR_ADC12RST                //bit13
  46.         //        |RCC_AHB2RSTR_GPIOGRST                //bit06
  47.         //        |RCC_AHB2RSTR_GPIOFRST                //bit05
  48.         //        |RCC_AHB2RSTR_GPIOERST                //bit04
  49.         //        |RCC_AHB2RSTR_GPIODRST                //bit03
  50.                 |RCC_AHB2RSTR_GPIOCRST                //bit02
  51.         //        |RCC_AHB2RSTR_GPIOBRST                //bit01
  52.         //        |RCC_AHB2RSTR_GPIOARST                //bit00
  53.         ;
  54.         RCC->AHB2RSTR &= 0xffffffff        //defualt: 0x0000 0000
  55.         //        &~RCC_AHB2RSTR_RNGRST                //bit26
  56.         //        &~RCC_AHB2RSTR_RNGRST                //bit24
  57.         //        &~RCC_AHB2RSTR_DAC4RST                //bit19
  58.         //        &~RCC_AHB2RSTR_DAC3RST                //bit18
  59.         //        &~RCC_AHB2RSTR_DAC2RST                //bit17
  60.         //        &~RCC_AHB2RSTR_DAC1RST                //bit16
  61.         //        &~RCC_AHB2RSTR_ADC345RST        //bit14
  62.         //        &~RCC_AHB2RSTR_ADC12RST                //bit13
  63.         //        &~RCC_AHB2RSTR_GPIOGRST                //bit06
  64.         //        &~RCC_AHB2RSTR_GPIOFRST                //bit05
  65.         //        &~RCC_AHB2RSTR_GPIOERST                //bit04
  66.         //        &~RCC_AHB2RSTR_GPIODRST                //bit03
  67.                 &~RCC_AHB2RSTR_GPIOCRST                //bit02
  68.         //        &~RCC_AHB2RSTR_GPIOBRST                //bit01
  69.         //        &~RCC_AHB2RSTR_GPIOARST                //bit00
  70.         ;
  71.         RCC->AHB2ENR = 0                        //default: 0x0000 0000
  72.         //        |RCC_AHB2ENR_RNGEN                        //bit26
  73.         //        |RCC_AHB2ENR_DAC4EN                        //bit19
  74.         //        |RCC_AHB2ENR_DAC3EN                        //bit18
  75.         //        |RCC_AHB2ENR_DAC2EN                        //bit17
  76.         //        |RCC_AHB2ENR_DAC1EN                        //bit16
  77.         //        |RCC_AHB2ENR_ADC345EN                //bit14
  78.         //        |RCC_AHB2ENR_ADC12EN                //bit13
  79.         //        |RCC_AHB2ENR_GPIOGEN                //bit06
  80.         //        |RCC_AHB2ENR_GPIOFEN                //bit05
  81.         //        |RCC_AHB2ENR_GPIOEEN                //bit04
  82.         //        |RCC_AHB2ENR_GPIODEN                //bit03
  83.                 |RCC_AHB2ENR_GPIOCEN                //bit02
  84.         //        |RCC_AHB2ENR_GPIOBEN                //bit01
  85.         //        |RCC_AHB2ENR_GPIOAEN                //bit00
  86.         ;
  87.         //--------------------------------------------------------------------------------------//
  88.         //---------------------------------------- AHB3 ----------------------------------------//
  89.         //--------------------------------------------------------------------------------------//
  90.         RCC->AHB3RSTR |= 0                        //default:0x0000 0000
  91.         //        |RCC_AHB3RSTR_QSPIRST                //bit08
  92.         //        |RCC_AHB3RSTR_FMCRST                //bit00
  93.         ;
  94.         RCC->AHB3RSTR &= 0xffffffff        //default:0x0000 0000
  95.         //        &~RCC_AHB3RSTR_QSPIRST                //bit08
  96.         //        &~RCC_AHB3RSTR_FMCRST                //bit00
  97.         ;

  98.         RCC->AHB3ENR |= 0                        //default: 0x0000 0000
  99.         //        |RCC_AHB3ENR_QSPIEN                        //bit08
  100.         //        |RCC_AHB3ENR_FMCEN                        //bit00
  101.         ;
  102.         //--------------------------------------------------------------------------------------//
  103.         //---------------------------------------- APB1 ----------------------------------------//
  104.         //--------------------------------------------------------------------------------------//
  105.         RCC->APB1RSTR1 |= 0                        //default: 0x0000 0000
  106.         //        |RCC_APB1RSTR1_LPTIM1RST        //bit31
  107.         //        |RCC_APB1RSTR1_I2C3RST                //bit30
  108.         //        |RCC_APB1RSTR1_PWRRST                //bit28
  109.         //        |RCC_APB1RSTR1_FDCANRST                //bit25
  110.         //        |RCC_APB1RSTR1_USBRST                //bit23
  111.         //        |RCC_APB1RSTR1_I2C2RST                //bit22
  112.         //        |RCC_APB1RSTR1_I2C1RST                //bit21
  113.         //        |RCC_APB1RSTR1_UART5RST                //bit20
  114.         //        |RCC_APB1RSTR1_UART4RST                //bit19
  115.         //        |RCC_APB1RSTR1_USART3RST        //bit18
  116.         //        |RCC_APB1RSTR1_USART2RST        //bit17
  117.         //        |RCC_APB1RSTR1_SPI3RST                //bit15
  118.         //        |RCC_APB1RSTR1_SPI2RST                //bit14
  119.         //        |RCC_APB1RSTR1_CRSRST                //bit08
  120.                 |RCC_APB1RSTR1_TIM7RST                //bit05
  121.         //        |RCC_APB1RSTR1_TIM6RST                //bit04
  122.         //        |RCC_APB1RSTR1_TIM5RST                //bit03
  123.         //        |RCC_APB1RSTR1_TIM4RST                //bit02
  124.         //        |RCC_APB1RSTR1_TIM3RST                //bit01
  125.         //        |RCC_APB1RSTR1_TIM2RST                //bit00
  126.         ;
  127.         RCC->APB1RSTR1 &= 0xffffffff//default: 0x0000 0000
  128.         //        &~RCC_APB1RSTR1_LPTIM1RST        //bit31
  129.         //        &~RCC_APB1RSTR1_I2C3RST                //bit30
  130.         //        &~RCC_APB1RSTR1_PWRRST                //bit28
  131.         //        &~RCC_APB1RSTR1_FDCANRST        //bit25
  132.         //        &~RCC_APB1RSTR1_USBRST                //bit23
  133.         //        &~RCC_APB1RSTR1_I2C2RST                //bit22
  134.         //        &~RCC_APB1RSTR1_I2C1RST                //bit21
  135.         //        &~RCC_APB1RSTR1_UART5RST        //bit20
  136.         //        &~RCC_APB1RSTR1_UART4RST        //bit19
  137.         //        &~RCC_APB1RSTR1_USART3RST        //bit18
  138.         //        &~RCC_APB1RSTR1_USART2RST        //bit17
  139.         //        &~RCC_APB1RSTR1_SPI3RST                //bit15
  140.         //        &~RCC_APB1RSTR1_SPI2RST                //bit14
  141.         //        &~RCC_APB1RSTR1_CRSRST                //bit08
  142.                 &~RCC_APB1RSTR1_TIM7RST                //bit05
  143.         //        &~RCC_APB1RSTR1_TIM6RST                //bit04
  144.         //        &~RCC_APB1RSTR1_TIM5RST                //bit03
  145.         //        &~RCC_APB1RSTR1_TIM4RST                //bit02
  146.         //        &~RCC_APB1RSTR1_TIM3RST                //bit01
  147.         //        &~RCC_APB1RSTR1_TIM2RST                //bit00
  148.         ;

  149.         RCC->APB1ENR1 |= 0                        //default: 0x0000 0400
  150.         //        |RCC_APB1ENR1_LPTIM1EN                //bit31
  151.         //        |RCC_APB1ENR1_I2C3EN                //bit30
  152.         //        |RCC_APB1ENR1_PWREN                        //bit28
  153.         //        |RCC_APB1ENR1_FDCANEN                //bit25
  154.         //        |RCC_APB1ENR1_USBEN                        //bit23
  155.         //        |RCC_APB1ENR1_I2C2EN                //bit22
  156.         //        |RCC_APB1ENR1_I2C1EN                //bit21
  157.         //        |RCC_APB1ENR1_UART5EN                //bit20
  158.         //        |RCC_APB1ENR1_UART4EN                //bit19
  159.         //        |RCC_APB1ENR1_USART3EN                //bit18
  160.         //        |RCC_APB1ENR1_USART2EN                //bit17
  161.         //        |RCC_APB1ENR1_SPI3EN                //bit15
  162.         //        |RCC_APB1ENR1_SPI2EN                //bit14
  163.         //        |RCC_APB1ENR1_WWDGEN                //bit11
  164.         //        |RCC_APB1ENR1_RTCAPBEN                //bit10
  165.         //        |RCC_APB1ENR1_CRSEN                        //bit08
  166.                 |RCC_APB1ENR1_TIM7EN                //bit05
  167.         //        |RCC_APB1ENR1_TIM6EN                //bit04
  168.         //        |RCC_APB1ENR1_TIM5EN                //bit03
  169.         //        |RCC_APB1ENR1_TIM4EN                //bit02
  170.         //        |RCC_APB1ENR1_TIM3EN                //bit01
  171.         //        |RCC_APB1ENR1_TIM2EN                //bit00
  172.         ;


  173.         RCC->APB1RSTR2 |= 0                        //default: 0x0000 0000
  174.         //        |RCC_APB1RSTR2_UCPD1RST                //bit08
  175.         //        |RCC_APB1RSTR2_I2C4RST                //bit01
  176.         //        |RCC_APB1RSTR2_LPUART1RST        //bit00
  177.         ;
  178.         RCC->APB1RSTR2 &= 0xffffffff//default: 0x0000 0000
  179.         //        &~RCC_APB1RSTR2_UCPD1RST        //bit08
  180.         //        &~RCC_APB1RSTR2_I2C4RST                //bit01
  181.         //        &~RCC_APB1RSTR2_LPUART1RST        //bit00
  182.         ;

  183.         RCC->APB1ENR2 |= 0                        //default: 0x0000 0000
  184.         //        |RCC_APB1ENR2_UCPD1EN                //bit08
  185.         //        |RCC_APB1ENR2_I2C4EN                //bit01
  186.         //        |RCC_APB1ENR2_LPUART1EN                //bit00
  187.         ;
  188.         //--------------------------------------------------------------------------------------//
  189.         //---------------------------------------- APB2 ----------------------------------------//
  190.         //--------------------------------------------------------------------------------------//
  191.         RCC->APB2RSTR |= 0                        //default: 0x0000 0000
  192.         //        |RCC_APB2RSTR_HRTIM1RST                //bit26
  193.         //        |RCC_APB2RSTR_SAI1RST                //bit21
  194.         //        |RCC_APB2RSTR_TIM20RST                //bit20
  195.         //        |RCC_APB2RSTR_TIM17RST                //bit18
  196.         //        |RCC_APB2RSTR_TIM16RST                //bit17
  197.         //        |RCC_APB2RSTR_TIM15RST                //bit16
  198.         //        |RCC_APB2RSTR_SPI4RST                //bit15
  199.         //        |RCC_APB2RSTR_USART1RST                //bit14
  200.         //        |RCC_APB2RSTR_TIM8RST                //bit13
  201.         //        |RCC_APB2RSTR_SPI1RST                //bit12
  202.         //        |RCC_APB2RSTR_TIM1RST                //bit11
  203.         //        |RCC_APB2RSTR_SYSCFGRST                //bit00
  204.         ;
  205.         RCC->APB2RSTR &= 0xffffffff        //default: 0x0000 0000
  206.         //        &~RCC_APB2RSTR_HRTIM1RST        //bit26
  207.         //        &~RCC_APB2RSTR_SAI1RST                //bit21
  208.         //        &~RCC_APB2RSTR_TIM20RST                //bit20
  209.         //        &~RCC_APB2RSTR_TIM17RST                //bit18
  210.         //        &~RCC_APB2RSTR_TIM16RST                //bit17
  211.         //        &~RCC_APB2RSTR_TIM15RST                //bit16
  212.         //        &~RCC_APB2RSTR_SPI4RST                //bit15
  213.         //        &~RCC_APB2RSTR_USART1RST        //bit14
  214.         //        &~RCC_APB2RSTR_TIM8RST                //bit13
  215.         //        &~RCC_APB2RSTR_SPI1RST                //bit12
  216.         //        &~RCC_APB2RSTR_TIM1RST                //bit11
  217.         //        &~RCC_APB2RSTR_SYSCFGRST        //bit00
  218.         ;

  219.         RCC->APB2ENR |= 0                        //default: 0x0000 0000
  220.         //        |RCC_APB2ENR_HRTIM1EN                //bit26
  221.         //        |RCC_APB2ENR_SAI1EN                        //bit21
  222.         //        |RCC_APB2ENR_TIM20EN                //bit20
  223.         //        |RCC_APB2ENR_TIM17EN                //bit18
  224.         //        |RCC_APB2ENR_TIM16EN                //bit17
  225.         //        |RCC_APB2ENR_TIM15EN                //bit16
  226.         //        |RCC_APB2ENR_SPI4EN                        //bit15
  227.         //        |RCC_APB2ENR_USART1EN                //bit14
  228.         //        |RCC_APB2ENR_TIM8EN                        //bit13
  229.         //        |RCC_APB2ENR_SPI1EN                        //bit12
  230.         //        |RCC_APB2ENR_TIM1EN                        //bit11
  231.         //        |RCC_APB2ENR_SYSCFGEN                //bit00
  232.         ;
  233. }
复制代码




4_meitu_4.jpg
收藏 评论0 发布时间:2020-9-18 10:46

举报

0个回答

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版