请选择 进入手机版 | 继续访问电脑版
搜索
查看: 269|回复: 0

[分享] STM32G474时钟设置笔记(170MHz)

[复制链接]

该用户从未签到

1272

主题

2390

帖子

0

蝴蝶豆

管理员

最后登录
2020-10-30
发表于 2020-9-18 10:46:13 | 显示全部楼层 |阅读模式
编写基础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
回复

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /2 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2020-10-31 14:47 , Processed in 0.080736 second(s), 16 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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