STM32固件库使用手册RCC库函数部分
STM32 固件库中RCC_GetClocksFreq()函数注意事项
STM32 固件库中RCC_GetClocksFreq()函数注意事项
在STM32 固件库中,当你使用RCC_GetClocksFreq()这个函数的时候,需
要注意一下。(比如,你在使用串口的USART_Init 的时候,就无形中使用到这
个函数)。
当你使用外部晶振做为系统时钟的时候,而且外部晶振不是标准8MHz 的时
候,你需要留意一下STM32 的固件库,里面的stm32f10x_rcc.c 这个文件,在
它的RCC_GetClocksFreq()这个函数中,有这么一段void
RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks){u32 tmp = 0, pllmull = 0, pllsource = 0, presc = 0;
/* Get SYSCLK source -*/tmp = RCC->CFGR & CFGR_SWS_Mask;
switch (tmp){case 0 乘以00:/* HSI used as system clock */RCC_Clocks- >SYSCLK_Frequency = HSI_Value;break;
case 0 乘以04:/* HSE used as system clock */RCC_Clocks- >SYSCLK_Frequency=HSE_Value;break;
case 0 乘以08:/* PLL used as system clock *//* Get PLL clock source and multiplication factor -*/pllmull = RCC->CFGR & CFGR_PLLMull_Mask;pllmull = ( pllmull >> 18) + 2;
单片机STM32开发中常用库函数分析
单片机STM32开发中常用库函数分析
在STM32开发中,使用库函数可以帮助开发人员更快速、更便捷地实
现目标功能。下面是一些常用的STM32库函数的分析:
1. GPIO库函数:GPIO库函数用于对STM32的通用输入输出引脚进行
配置和控制。通过这些函数可以实现引脚的初始化、读取和设置等操作。
例如,GPIO_Pin_Init(函数可以对引脚进行初始化配置,
GPIO_Pin_Read(函数用于读取引脚的电平,GPIO_Pin_Write(函数用于设
置引脚的输出电平。这些函数的使用可以方便地对外设进行控制。
2. NVIC库函数:NVIC库函数用于对中断向量表进行操作和配置。通
过这些函数可以实现中断的使能、优先级的设置等操作。例如,
NVIC_EnableIRQ(函数可以使能指定的中断,NVIC_SetPriority(函数可设
置中断的优先级。这些函数的使用可以方便地管理中断响应。
3. RCC库函数:RCC库函数用于对STM32的时钟系统进行配置和管理。通过这些函数可以实现外部时钟源的配置、APB总线时钟的配置等操作。
例如,RCC_OscConfig(函数可进行时钟源的配置,
RCC_APBPeriphClockCmd(函数可使能相应的外设时钟。这些函数的使用可
以方便地进行时钟管理。
4. UART库函数:UART库函数用于对STM32的串行通讯端口进行操作
和配置。通过这些函数可以实现串口的初始化、发送和接收等操作。例如,UART_Init(函数用于串口的初始化设置,UART_SendData(函数用于发送数据,UART_ReceiveData(函数用于接收数据。这些函数的使用可以方便地
stm32标准库函数手册
stm32标准库函数手册
STM32标准库函数是一种由ST公司推出的一套用于STM32微控制器编程的开发工具,它能够帮助开发者快速地进行芯片的开发、调试和测试。本文将对STM32标准库函数进行
详细的介绍,并提供中文手册,帮助开发者更好地掌握这个工具。
一、STM32标准库函数概述
STM32标准库函数是一套由ST公司提供的软件库,包括了一系列用于STM32微控制器的常用功能函数,例如GPIO、USART、SPI、I2C等,这些函数可以用于快速实现各种应用。同时,ST公司也提供了一些示例代码,可以方便开发者进行学习和参考。
STM32标准库函数可以与各种不同的开发环境集成,例如Keil、IAR、STM32Cube等,方便开发者进行开发。在使用STM32标准库函数时,可以通过库函数的方式来调用硬件资源,比如设置GPIO口的状态、使用USART进行通信、配置外部中断等。
1. 系统初始化函数:这些函数包括了芯片系统时钟的初始化、中断优先级的设置、
时钟输出的配置等,必须在主函数前进行调用。
2. GPIO和外部中断函数:这些函数用于对GPIO口状态的配置和读取,以及对外部中断的控制。
3. USART函数:这些函数用于对串口进行配置和读写操作。
8. DAC函数:这些函数用于对模拟量进行输出。
以下是STM32标准库函数的中文手册,包含了常用函数的介绍和使用方法。
1. 系统初始化函数
1.1. RCC配置函数
函数原型:void RCC_Configuration(void)
函数功能:配置STM32的时钟源和时钟分频系数。
STM32 固件库的使用
2012-03-14 10:40
iar for stm32 固件库的学习笔记
系统、源程序文件和头文件命名都以“stm32f10x-”作为开头
寄存器作为常量处理
外设函数的命名以外设的缩写加下划线开头每个单词的开头字母大写
每个函数名只有一个下划线分隔外设缩写和函数名的其他部分
ppp_Init :::根据PPP_InitTypeDef中指定的参数,初始化外设PPP。
PPP_DeInit::::复位外设PPP的所有寄存器至缺省值
PPP_StructInit :::其功能为通过设置PPP_InitTypeDef结构中的各种参数来定义外设的功能
PPP_Cmd:::使能或失能外设PPP
PPP_ITConfig:::为使能或者失能来自外设PPP某中断源
PPP_DMAConfig:::失能或者使能外设PPP的DMA接口
用以配置外设功能的函数总是以字符串“Config”结尾
PPP_GetFlagStatus:::检查外设PPP某标志位被设置与否
PPP_ClearFlag:::清楚外设PPP标志位
PPP_GetITStatus:::判断来自外设PPP的中断发生与否
PPP_ClearITPendingBit:::清除外设PPP中断待处理标志位
typedef signed long s32;
typedef signed short s16;
typedef signed char s8;
typedef signed long const sc32; /* Read Only */
typedef signed short const sc16; /* Read Only */
STM32 RCC配置详解
#include "stm32f10x.h"
GPIO_InitTypeDef GPIO_InitStructure;
RCC_ClocksTypeDef RCC_ClockFreq;
ErrorStatus HSEStartUpStatus;
/* Private function prototypes -----------------------------------------------*/
void SetSysClockToHSE(void);
void Delay(__IO uint32_t nCount);
int main(void)
{
SetSysClockToHSE(); //系统时钟初始化
/* This function fills the RCC_ClockFreq structure with the current
frequencies of different on chip clocks (for debug purpose) */
RCC_GetClocksFreq(&RCC_ClockFreq);
/* Enable Clock Security System(CSS): this will generate an NMI exception
when HSE clock fails */
RCC_ClockSecuritySystemCmd(ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC |
STM32库函数说明及示例
STM32库函数说明及示例
STM32库函数说明及示例(版本V1.4.0)
----第一篇:GPIO库
相关术语说明:
gpio:通用输入输出接口
gpio管脚:一个io管脚,这个管脚可以有多个配置。在库函数中用GPIO_Pin_1这样的宏定义表示
gpio端口(gpio分组):一组gpio管脚的信息。在库函数中用宏定义GPIOA GPIOB等表示
1 gpio库说明
库文件名:stm32f4xx_gpio.c
文档提示翻译:
如何使用这个驱动
(1)使用RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx, ENABLE)函数使能GPIO的AHB总线时钟。
(2)使用GPIO_Init()函数对每个引脚进行四种可能的配置
《1》输入状态:Floating(浮空), Pull-up(上拉), Pull-down (下拉)
《2》输出状态:Push-Pull (上拉下拉)(Pull-up(上拉), Pull-down(下拉)or no Pull(不上拉也不下拉)),Open Drain(开漏)(Pull-up(上拉), Pull-down(下拉)or no Pull(不上拉也不下拉)),在输出模式,速度配置成2MHZ,25MHZ,50MHZ和100MHZ. 《3》第二功能:上拉下拉和开漏
《4》模拟:当一个管脚被用作ADC通道或者DAC输出的时候,需要配置成此模式(3)外设的第二功能:
《1》在ADC和DAC模式,使用GPIO_InitStruct->GPIO_Mode = GPIO_Mode_AN 把需要的管脚配置成模拟模式
STM32F407-RCC介绍
RCC (Reset and Clock Control)
这里介绍RCC 的时钟控制功能
在STM32F103上,由于小组所有的板子都使用用同样的芯片,同样的晶振,以及同样的库函数,即使我们不去理解RCC,仍然可以将大多数功能调试出来。但如果使用不同型号的芯片,例如用STM32F407 与STM32103 进行通信,如果不去弄清楚RCC,在调试中可能会遇到麻烦。
下面就我调试STM32F407的这段时间,介绍一下RCC的部分功能。文档的前半部分是关于RCC的部分功能描述,后半部分是关于库函数的使用。
时钟结构
(原图请参考STM32F407 参考手册RCC部分)
STM32F407最高层是SYSCLK系统时钟,由其生成了AHB时钟,再由AHB时钟生成APB时钟。
SYSCLK系统时钟可以由3个基本的时钟源获得:HSE(外部高速晶振)或HSI(内部高速晶振)或PLL锁相环倍频。
例如:
板子上焊了8MHz的晶振,则HSE = 8MHz。如果焊了25MHz的,则HSE = 25MHz。
HSI是芯片内部自带的晶振,其大小由芯片型号决定,如STM32F407的HSI是16MHz。
PLL倍频的功能是:将HSE或HSI的频率放大,最大可以放大到168MHz.
SYSCLK系统时钟可以由HSE/HSI/PLL提供。
例如使用库函数:
RCC_SYSCLKConfig( RCC_SYSCLKSource_HSE);代表用HSE外部高速晶振作为系统时钟源。
如果HSE =8MHz,则SYSCLK = 8M,即STM32F407就会运行在8M的速度;
stm32 RCC 时钟彻底分析
stm32芯片手册上有张图表示的很清楚,一共有4个时钟源:1.HSI(内部高速时钟 8MHz)提供可以位系统时钟提供时钟源2.HSE(外部高速时钟)可以提供系统时钟和RTC时钟时钟源3.LSE(低速外部时钟32.768kHz)可以为可以为RTC提供时钟源4.LSI(低速内部时钟)可以为独立看门狗提供时钟源首先分析一下ST公司给的库函数:我用的是3.5的库我们看看SystemInit里是什么void SystemInit (void){RCC->CR |= (uint32_t)0x00000001; //打开HSI内部高速时钟#ifndef STM32F10X_CLRCC->CFGR &= (uint32_t)0xF8FF0000;//CFCG寄存器的27位没用,所以这个宏没用#else //MCO的两位清零,不往外输出时钟,0-15位清零,PLCK 2分频给ADC,HCLK不分频给APB2RCC->CFGR &= (uint32_t)0xF0FF0000;//HCLK不分频给APB1,sysclk不分频给AHB,HSI用作系统时钟,#endif /* STM32F10X_CL */ /* Reset HSEON, CSSON and PLLON bits */RCC->CR &= (uint32_t)0xFEF6FFFF; //HSE禁用/* Reset HSEBYP bit */RCC->CR &= (uint32_t)0xFFFBFFFF; //外部高速时钟未被旁路/* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */RCC->CFGR &= (uint32_t)0xFF80FFFF; //PLL 1.5分频,给USBpre,PLLMUL *2,HSE未分频做PLL输入HSI/2做PLL输入#ifdef STM32F10X_CL/* 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;#elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)/* Disable all interrupts and clear pending bits */RCC->CIR = 0x009F0000;/* Reset CFGR2 register */RCC->CFGR2 = 0x00000000; #else/* Disable all interrupts and clear pending bits */RCC->CIR = 0x009F0000;#endif /* STM32F10X_CL */#if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL)#ifdef DATA_IN_ExtSRAMSystemInit_ExtMemCtl(); #endif /* DATA_IN_ExtSRAM */#endif /* Configure the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers *//* Configure the Flash Latency cycles and enable prefetch buffer */SetSysClock(); //最终调用时钟设置函数,下面分析#ifdef VECT_TAB_SRAMSCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /*中断向量表定位在SRAM_BASE(0X20000000)+VECT_TAB_OFFSET(0X0)处*/#elseSCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /*中断向量表定位在FLASH_BASE(0X08000000)+VECT_TAB_OFFSET(0X0)处 */#endif } 下面看看SetSysClock()函数static void SetSysClock(void){#ifdef SYSCLK_FREQ_HSESetSysClockToHSE();#elif defined SYSCLK_FREQ_24MHzSetSysClockTo24();#elif defined SYSCLK_FREQ_36MHzSetSysClockTo36();#elif defined SYSCLK_FREQ_48MHzSetSysClockTo48();#elif defined SYSCLK_FREQ_56MHzSetSysCloc
STM32RCC分析与使用
STM32RCC分析与使用
STM32系列微控制器是意法半导体公司(STMicroelectronics)推出
的一款32位嵌入式微控制器,广泛应用于各种各样的嵌入式应用中。在STM32中,RCC(Reset and Clock Control)模块是用来控制系统复位和
时钟的重要模块。下面将对RCC模块进行分析与使用。
首先,RCC模块的主要功能是对系统时钟进行控制和配置。在STM32中,系统时钟用于驱动处理器和外设,因此RCC模块的配置对整个系统的
性能和功能都有着重要的影响。RCC模块提供了多个时钟源和分频器来满
足不同需求。
RCC模块主要包括以下功能:
1.时钟源选择:RCC可以选择多个时钟源,包括内部和外部时钟源。
常见的时钟源包括内部高速时钟(HSI)、内部低速时钟(LSI)、外部高
速时钟(HSE)和外部低速时钟(LSE)等。通过选择不同的时钟源,可以
满足不同的功耗和精度要求。
2.时钟分频:RCC模块提供了多个分频器,可以对系统时钟进行分频,以得到所需的时钟频率。可以通过调整分频系数来满足不同的应用需求,
例如减小系统时钟频率以降低功耗。
3.时钟输出:RCC模块还可以将系统时钟输出到特定的管脚,以供其
他外设使用。这对于一些需要同步时钟的应用非常有用。
在使用RCC模块时,一般需要进行以下几个步骤:
1.使能对应的时钟源:根据实际需求选择合适的时钟源,并使能该时
钟源。对于外部时钟源,还需要设置相关的参数,如频率和稳定性。
2.配置时钟分频器:根据应用需求配置时钟分频器,以得到所需的时
钟频率。通常可以通过寄存器设置来完成。
STM32 V3.5固件库函数调用说明(中文版)
目录
目录 (1)
1.变量定义 (4)
2.GPIO相关函数 (5)
2.1.函数GPIO_Init (5)
2.2.函数GPIO_SetBits (6)
2.3.函数GPIO_ReadInputDataBit (7)
2.4.函数GPIO_ReadOutputDataBit (7)
2.5.函数GPIO_PinRemapConfig (8)
2.6.函数GPIO_Write (9)
2.7.函数GPIO_ReadInputData (10)
3.RCC相关函数 (10)
3.1.函数RCC_APB2PeriphClockCmd (10)
3.2.函数RCC_APB1PeriphClockCmd (11)
3.3.函数RCC_AHBPeriphClockCmd (12)
3.4.函数RCC_ADCCLKConfig (12)
4.SysTick函数——SysTick_Config (12)
5.NVIC相关函数 (14)
5.1.函数NVIC_Init (14)
5.2.函数NVIC_PriorityGroupConfig (17)
5.3.函数NVIC_SetPriority (17)
6.EXTI相关函数 (17)
6.1.函数GPIO_EXTILineConfig (17)
6.2.函数EXIT_Init (18)
6.3.函数EXTI_GetITStatus (19)
6.4.函数EXTI_ClearITPendingBit (19)
ART相关函数 (20)
7.2.函数USART_Cmd (21)
7.3.函数USART_SendData (21)
stm32f3 标准库函数说明
一、STM32F3标准库简介
STM32F3是STM32系列微控制器的一款产品,它采用Cortex-M4
内核,具有丰富的外设和功能。STM32F3标准库是由STMicroelectronics官方提供的一套用于开发STM32F3系列微控制
器的函数库,它包含了丰富的函数和例程,能够为开发者提供方便快
捷的开发支持。
二、STM32F3标准库函数分类
1. GPIO函数
GPIO函数是用于对STM32F3微控制器的GPIO端口进行操作的函数集合,包括对GPIO端口的初始化、输入输出设置、读取状态等功能。
2. 定时器函数
定时器函数是用于对STM32F3微控制器的定时器进行操作的函数集合,包括定时器的初始化、启动、停止、中断处理等功能。
3. 中断函数
中断函数是用于对STM32F3微控制器的中断进行操作的函数集合,
包括中断的使能、优先级设置、中断向量表的编写等功能。
4. 串口函数
串口函数是用于对STM32F3微控制器的串口进行操作的函数集合,包括串口的初始化、发送数据、接收数据、中断处理等功能。
5. ADC/DAC函数
ADC/DAC函数是用于对STM32F3微控制器的模数转换器和数模转换器进行操作的函数集合,包括ADC/DAC的初始化、转换启动、中断处理、数据处理等功能。
6. 外设驱动函数
外设驱动函数是用于对STM32F3微控制器的外设进行操作的函数集合,包括I2C、SPI、USB、CAN等外设的初始化、数据传输、中断处理等功能。
三、STM32F3标准库函数使用示例
以下是一些STM32F3标准库函数的使用示例,供开发者参考:
STM32V3.5固件库函数调用说明(中文版)
STM32V3.5固件库函数调⽤说明(中⽂版)⽬录
⽬录 (1)
1.变量定义 (4)
2.GPIO相关函数 (5)
2.1.函数GPIO_Init (5)
2.2.函数GPIO_SetBits (6)
2.3.函数GPIO_ReadInputDataBit (7)
2.4.函数GPIO_ReadOutputDataBit (7)
2.5.函数GPIO_PinRemapConfig (8)
2.6.函数GPIO_Write (9)
2.7.函数GPIO_ReadInputData (10)
3.RCC相关函数 (10)
3.1.函数RCC_APB2PeriphClockCmd (10)
3.2.函数RCC_APB1PeriphClockCmd (11)
3.3.函数RCC_AHBPeriphClockCmd (12)
3.4.函数RCC_ADCCLKConfig (12)
4.SysTick函数——SysTick_Config (12)
5.NVIC相关函数 (14)
5.1.函数NVIC_Init (14)
5.2.函数NVIC_PriorityGroupConfig (17)
5.3.函数NVIC_SetPriority (17)
6.EXTI相关函数 (17)
6.1.函数GPIO_EXTILineConfig (17)
6.2.函数EXIT_Init (18)
6.3.函数EXTI_GetITStatus (19)
6.4.函数EXTI_ClearITPendingBit (19)
/doc/998fa6c5900ef12d2af90242a8956bec0975a518.html ART相关函数 (20) 7.2.函数USART_Cmd (21)
stm32时钟初始化函数rcc_configuration(void)[指南]
E rrorStatus HSE StartUpStatus; //什么意思?格式?
您好:
您出现这个问题的原因可能是你的程序里调用了一些标准C的函数,但这些函数在嵌入式C语言里是没有定义的,你需要对你调用的这些函数进行重新定义。
举个例子,例如你调用了标准C里面的printf函数,就会出现在你所说的错误,你需要在程序里对这个函数进行重定义或者直接删除。
GPIO_InitTypeDef GPIO_InitStructure;这句话什么意思
声明一个结构体,名字是GPIO_InitStructure,结构体原型由GPIO_InitTypeDef 确定,
stm32里面初始化GPIO用的吧。。设置完了GPIO_InitStruc ture里面的内容后
在GPIO_Init (GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_InitStruct)里面调用,
比如初始化pa口,就是
GPIO_Init (GPIOA, &GPIO_InitStructure),括号里后面那个就是你问题里面声明的那个结构体1.函数RCC_DeInit
Table 338. 函数RCC_DeInit(1)(2)
函数名
RCC_DeInit
函数原形
void RCC_DeInit(void)
功能描述
将外设RCC寄存器重设为缺省值
输入参数
无
输出参数
无
返回值
无
先决条件
无
被调用函数
无
2. 15.2.2 函数RCC_HSEConfig
Table 339. 描述了函数RCC_HSEConfig
函数名
RCC_HSEConfig
STM32RCC分析与使用
STM32RCC分析与使用
STM32 RCC(Reset and Clock Control)模块是基于STMicroelectronics公司的STM32系列微控制器(MCU)的一部分。RCC 模块用于对MCU的时钟和复位进行控制和配置。本文将对STM32 RCC模块进行分析与使用进行详细介绍。
一、RCC模块概述
RCC模块包含多个寄存器和位域,用于配置MCU的时钟源和时钟分频器,以及对复位进行控制。RCC模块的主要功能如下:
1.时钟源选择:RCC模块允许选择MCU的时钟源,包括内部时钟源(HSI、LSI)、外部时钟源(HSE、LSE)和PLL。
2.时钟分频器:RCC模块允许对时钟源进行分频,从而获得所需的系统时钟频率。
3.复位控制:RCC模块提供了多个复位信号,包括软件复位、外部复位和低功耗复位。
4.时钟使能:RCC模块允许对不同模块的时钟进行使能或禁用,以节省功耗。
二、RCC模块寄存器
RCC模块包含多个寄存器,用于配置和控制时钟和复位。以下是一些常用的RCC模块寄存器:
1.RCC_CR:时钟控制寄存器,包含时钟源选择和使能控制位。
2.RCC_CFGR:时钟配置寄存器,包含PLL、时钟分频器和USBOTGFS
时钟配置等。
3.RCC_APB1ENR/RCC_APB2ENR:外设时钟使能寄存器,用于使能或禁
用不同外设的时钟。
4.RCC_AHB1RSTR/RCC_APB1RSTR/RCC_APB2RSTR:复位寄存器,用于控
制不同外设的复位。
5.RCC_CSR:复位状态寄存器,用于读取和清除复位原因。
stm32库函数详解
2
Baidu Nhomakorabea
一、通用输入/输出(GPIO)
GPIO 寄存器结构
GPIO_TypeDef 和 AFIO_TypeDef,在文件“stm32f10x_map.h”中定义如下: typedef struct { vu32 CRL; vu32 CRH; vu32 IDR; vu32 ODR; vu32 BSRR; vu32 BRR; vu32 LCKR; } GPIO_TypeDef; typedef struct { vu32 EVCR; vu32 MAPR; vu32 EXTICR[4]; } AFIO_TypeDef;
3
GPIO_InitTypeDef structure GPIO_InitTypeDef 定义于文件“stm32f10x_gpio.h”:
typedef struct { u16 GPIO_Pin; GPIOSpeed_TypeDef GPIO_Speed; GPIOMode_TypeDef GPIO_Mode; } GPIO_InitTypeDef;
STM32F10x_RCC
16.1 RTC寄存器结构 (214)
15 复位和时钟设置(RCC)
RCC有多种用途,包括时钟设置,外设复位和时钟管理。
Section 15.1 RCC寄存器结构描述了固件函数库所使用的数据结构, Section 15.2 固件库函数介绍了函数库里的所有函数。
15.1 RCC寄存器结构
RCC 寄存器结构,RCC_TypeDeff,在文件“stm2f10x_map.h中定义如下:
typedef struct
{
vu32 CR;
vu32 CFGR;
vu32 CIR;
vu32 APB2RSTR;
vu32 APB1RSTR;
vu32 AHBENR;
vu32 APB2ENR;
vu32 APB1ENR;
vu32 BDCR;
vu32 CSR;
}RCC_TypeDef;
RCC 文件:
#define PERIPH_BASE ((u32)0x40000000)
#define APB1PERIPH_BASE PERIPH_BASE
#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000)
#define AHBPERIPH_BASE (PERIPH_BASE + 0x20000)
#define RCC_BASE (AHBPERIPH_BASE + 0x1000)
#ifndef DEBUG
...
#ifdef _RCC
#define RCC ((RCC_TypeDef *) RCC_BASE)
#endif /*_RCC */
...
#else /* DEBUG */
...
#ifdef _RCC