12、RTC
1、实时时钟是一个独立的定时器。RTC模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。
2、 RTC模块和时钟配置系统(RCC_BDCR寄存器)处于后备区域,即在系统复位或从待机模式唤醒后,RTC的设置和时间维持不变。
3、系统复位后,对后备寄存器和RTC的访问被禁止,这是为了防止对后备区域(BKP)的意外写操作。执行以下操作将使能对后备寄存器和RTC的访问:
● 设置寄存器RCC_APB1ENR的PWREN和BKPEN位,使能电源和后备接口时钟
● 设置寄存器PWR_CR的DBP位,使能对后备寄存器和RTC的访问。
4、主要特征:
● 可编程的预分频系数:分频系数最高为2^20
● 32位的可编程计数器,可用于较长时间段的测量。
● 2个分离的时钟:用于APB1接口的PCLK1和RTC时钟
(RTC时钟的频率必须小于PCLK1时钟频率的四分之一以上)。
● 可以选择以下三种RTC的时钟源:
─ HSE 时钟除以128;
─ LSE振荡器时钟;
─ LSI振荡器时钟
● 2个独立的复位类型:
─ APB1接口由系统复位;
─ RTC核心(预分频器、闹钟、计数器和分频器)
只能由后备域复位
● 3个专门的可屏蔽中断:
─ 闹钟中断,用来产生一个软件可编程的闹钟中断。
─ 秒中断,用来产生一个可编程的周期性中断信号
(最长可达1秒)。
─ 溢出中断,指示内部可编程计数器溢出并回转为0
的状态。
5、
6、读RTC寄存器
RTC核完全独立于RTC APB1接口。
软件通过APB1接口访问RTC的预分频值、计数器值和闹钟值。但是,相关的可读寄存器只在与RTC APB1时钟进行重新同步的RTC时钟的上升沿被更新。RTC标志也是如此的。
这意味着,如果APB1接口曾经被关闭,而读操作又是在刚刚重新开启APB1之后,则在第一次的内部寄存器更新之前,从APB1上读出的RTC寄存器数值可能被破坏了(通常读到0) 。下述几种情况下能够发生这种情形:
● 发生系统复位或电源复位
● 系统刚从待机模式唤醒
● 系统刚从停机模式唤醒
所有以上情况中,APB1接口被禁止时(复位、无时钟或断电)RTC核仍保持运行状态。
因此,若在读取RTC寄存器时,RTC 的APB1 接口曾经处于禁止状态,则软件首先必须等待RTC_CRL寄存器中的RSF位(寄存器同步标志)被硬件置’1’。
7、配置RTC寄存器
必须设置RTC_CRL 寄存器中的CNF 位,使 RTC进入配置模式后,才能写入 RTC_PRL、RTC_CNT、RTC_ALR寄存器。
另外,对RTC任何寄存器的写操作,都必须在前一次写操作结束后进行。可以通过查询RTC_CR寄存器中的RTOFF状态位,判断RTC寄存器是否处于更新中。仅当RTOFF状态位是’1’时,才可以写入RTC寄存器。
配置过程:
1. 查询RTOFF位,直到RTOFF的值变为’1’
2. 置CNF值为1,进入配置模式
3. 对一个或多个RTC寄存器进行写操作
4. 清除CNF标志位,退出配置模式
5.查询RTOFF,直至RTOFF位变为’1’ 以确认写操作已经完成。
仅当CNF标志位被清除时,写操作才能进行,这个过程至少需要3个RTCCLK周期。
8、BKP简介
备份寄存器是42个16位的寄存器,可用来存储84个字节的用户应用程序数据。他们处在备份域里,当VDD 电源被切断,他们仍然由VBAT维持供电。当系统在待机模式下被唤醒,或系统复位或电源复位时,他们也不会被复位。
此外,BKP控制寄存器用来管理侵入检测和RTC校准功能。 复位后,对备份寄存器和RTC的访问被禁止,并且备份域被保护以防止可能存在的意外的写操作。执行以下操作可以使能对备份寄存器和RTC的访问。
● 通过设置寄存器RCC_APB1ENR的PWREN和BKPEN位来打开电源和后备接口的时钟 ● 电源控制寄存器(PWR_CR)的DBP位来使能对后备寄存器和RTC的访问。
9、程序例程:
1 /************************************************************************************************************************************* 2 * 3 * 文件名称:main.c 4 * 文件功能:主函数文件 5 * 6 ***************************************************************************************************************************************/ 7 8 #include "pbdata.h"//调用自定义公共函数库 9 10 11 /********************************************************************************* 12 * 13 * 初始化操作 14 * 15 *********************************************************************************/ 16 void RCC_Configuration(void);//系统时钟初始化函数声明 17 void GPIO_Configuration(void);//GPIO初始化函数声明 18 void NVIC_Configuration(void);//中断优先级配置函数声明 19 void USART_Configuration(void);//串口配置函数声明 20 void RTC_Configuration(void);//RTC配置函数声明 21 void Clock_Init(void);//RTC时钟初始化函数 22 23 24 25 /******************************************************************************** 26 * 27 * 函数名称:main(void) 28 * 函数功能:主函数 29 * 函数说明:不能用void定义主函数 30 * 31 ********************************************************************************/ 32 int main(void)//void不能void定义主函数 33 { 34 35 u32 TimeData=0,hh=0,mm=0,ss=0; 36 37 RCC_Configuration(); //系统时钟初始化 38 39 GPIO_Configuration();//端口初始化 40 41 USART_Configuration();//串口配置 42 43 RTC_Configuration();//RTC配置函数声明 44 45 Clock_Init();//RTC时钟初始化函数 46 47 NVIC_Configuration();//中断优先级配置 48 49 50 51 52 while(1) 53 { 54 if(tim_bz==1)//1s中断 55 { 56 tim_bz=0; 57 58 TimeData=RTC_GetCounter(); 59 60 hh=TimeData/3600;//小时,一小时3600秒 61 mm=(TimeData%3600)/60;//分钟,一小时60分 62 ss=TimeData%60;//秒 63 64 printf("time: %0.2d:%0.2d:%0.2d\n",hh,mm,ss); 65 } 66 67 } 68 69 } 70 71 72 73 74 /******************************************************************************** 75 * 76 * 函数名称:RCC_Configuration(void) 77 * 函数功能:系统时钟高初始化函数 78 * 79 ********************************************************************************/ 80 void RCC_Configuration(void)//系统时钟高初始化函数 81 { 82 83 SystemInit();//系统初始化 84 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//串口对应GPIO时钟使能 85 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//串口时钟使能 86 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//引脚复用 87 88 } 89 90 91 92 /******************************************************************************* 93 * 94 * 函数名称:GPIO_Configuration(void) 95 * 函数功能:GPIO初始化函数 96 * 97 ********************************************************************************/ 98 99 void GPIO_Configuration(void)//GPIO初始化函数 100 { 101 102 103 /*串口引脚配置*/ 104 GPIO_InitTypeDef GPIO_InitStructure;//定义一个GPIO设置的结构体变量 105 106 /*输出引脚配置*/ 107 /*结构体变量赋值*/ 108 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;////引脚配置TX 109 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//配置频率 110 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//发送要配置成复用推挽输出 111 /*对应的GPIO初始化*/ 112 GPIO_Init(GPIOA,&GPIO_InitStructure); 113 114 115 /*输入引脚配置*/ 116 /*结构体变量赋值*/ 117 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;////引脚配置RX 118 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//接收引脚配置成浮空输入 119 /*对应的GPIO初始化*/ 120 GPIO_Init(GPIOA,&GPIO_InitStructure); 121 122 123 } 124 125 126 127 128 129 /**************************************************************************** 130 * 131 * 函数名称:NVIC_Configuration(void) 132 * 函数功能:配置中断优先级 133 * 134 ****************************************************************************/ 135 136 void NVIC_Configuration(void) 137 { 138 NVIC_InitTypeDef NVIC_InitStructure; //定义一个优先级配置结构体变量 139 140 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//分组 141 142 NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; 143 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//抢断优先级 144 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//响应优先级 145 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能 146 147 148 /*RTC中断优先级配置*/ 149 NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn; 150 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//抢断优先级 151 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;//响应优先级 152 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能 153 154 155 NVIC_Init(&NVIC_InitStructure);//初始化 156 } 157 158 159 /********************************************************************************* 160 * 161 * 函数名称: 162 * 函数功能:串口配置函数 163 * 164 *********************************************************************************/ 165 void USART_Configuration(void) 166 { 167 /*定义串口配置结构体变量*/ 168 USART_InitTypeDef USART_InitStructure;//定义一个串口配置结构体变量 169 170 171 /*结构体变量赋值*/ 172 USART_InitStructure.USART_BaudRate = 9600;//波特率9600 173 USART_InitStructure.USART_WordLength = USART_WordLength_8b;//位宽,8位 174 USART_InitStructure.USART_StopBits = USART_StopBits_1;//停止位1 175 USART_InitStructure.USART_Parity = USART_Parity_No;//不奇偶校验 176 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//流控禁止 177 USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;//发送使能 178 179 180 /*发送串口配置初始化*/ 181 USART_Init(USART1, &USART_InitStructure); 182 183 184 /*打开串口接收中断*/ 185 USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//当接收到数据时,会产生中断 186 187 188 /*打开串口*/ 189 USART_Cmd(USART1,ENABLE);//串口使能,打开 190 191 /*清空中断标志位*/ 192 USART_ClearFlag(USART1,USART_FLAG_TC); 193 } 194 195 196 197 /********************************************************************************* 198 * 199 * 函数名称:RTC_Configuration(void) 200 * 函数功能:RTC配置函数 201 * 202 *********************************************************************************/ 203 204 205 void RTC_Configuration(void)//RTC配置 206 { 207 208 RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);//打开后背电源 209 RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP,ENABLE);//打开存储器 210 211 PWR_BackupAccessCmd(ENABLE);//运行访问BKP区域 212 213 BKP_DeInit();//BKP复位 214 215 RCC_LSEConfig(RCC_LSE_ON);//使能外部低速晶振32.768k 216 217 while(RCC_GetFlagStatus(RCC_FLAG_LSERDY)==RESET);//等待外部低速晶振就绪 218 219 RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);//选择RTC外部时钟为低速晶振32.768k 220 221 RCC_RTCCLKCmd(ENABLE);//使能RTC时钟 222 223 RTC_WaitForSynchro();//等待RTC寄存器同步 224 225 RTC_WaitForLastTask();//等待RTC寄存器完成 226 227 RTC_ITConfig(RTC_IT_SEC,ENABLE);//使能RTC秒中断 228 229 RTC_WaitForLastTask();//等待RTC寄存器完成 230 231 RTC_SetPrescaler(32767);//设置预分频 232 233 RTC_WaitForLastTask();//等待RTC寄存器完成 234 235 } 236 237 238 239 240 /********************************************************************************* 241 * 242 * 函数名称:Clock_Init(void) 243 * 函数功能:RTC时钟初始化 244 * 245 *********************************************************************************/ 246 247 void Clock_Init(void) 248 { 249 if(BKP_ReadBackupRegister(BKP_DR1)!=0xA5A5)//设置一个标志数,第一次运行,初始化设置 250 { 251 RTC_Configuration();//RTC初始化 252 253 RTC_WaitForLastTask();//等待RTC寄存器完成 254 255 RTC_SetCounter(0);//设置时间初值 256 257 RTC_WaitForLastTask();//等待RTC寄存器完成 258 259 BKP_WriteBackupRegister(BKP_DR1,0xA5A5);//写入配置标志 260 261 } 262 263 264 else 265 { 266 RTC_WaitForSynchro();//等待RTC寄存器同步 267 268 RTC_WaitForLastTask();//等待RTC寄存器完成 269 270 RTC_ITConfig(RTC_IT_SEC,ENABLE);//使能RTC秒中断 271 } 272 273 RCC_ClearFlag();//清除复位标志 274 275 } 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302
1 /** 2 ****************************************************************************** 3 * @file GPIO/IOToggle/stm32f10x_it.c 4 * @author MCD Application Team 5 * @version V3.0.0 6 * @date 04/06/2009 7 * @brief Main Interrupt Service Routines. 8 * This file provides template for all exceptions handler and 9 * peripherals interrupt service routine. 10 ****************************************************************************** 11 * @copy 12 * 13 * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 14 * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 15 * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 16 * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 17 * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 18 * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 19 * 20 * <h2><center>© COPYRIGHT 2009 STMicroelectronics</center></h2> 21 */ 22 23 /* Includes ------------------------------------------------------------------*/ 24 #include "stm32f10x_it.h" 25 #include "stm32f10x_exti.h" 26 #include "stm32f10x_rcc.h" 27 #include "stm32f10x_tim.h" 28 #include "misc.h" 29 #include "pbdata.h" 30 31 void NMI_Handler(void) 32 { 33 } 34 35 36 37 /** 38 * @brief This function handles Hard Fault exception. 39 * @param None 40 * @retval : None 41 */ 42 void HardFault_Handler(void) 43 { 44 /* Go to infinite loop when Hard Fault exception occurs */ 45 while (1) 46 { 47 } 48 } 49 50 /** 51 * @brief This function handles Memory Manage exception. 52 * @param None 53 * @retval : None 54 */ 55 void MemManage_Handler(void) 56 { 57 /* Go to infinite loop when Memory Manage exception occurs */ 58 while (1) 59 { 60 } 61 } 62 63 /** 64 * @brief This function handles Bus Fault exception. 65 * @param None 66 * @retval : None 67 */ 68 void BusFault_Handler(void) 69 { 70 /* Go to infinite loop when Bus Fault exception occurs */ 71 while (1) 72 { 73 } 74 } 75 76 /** 77 * @brief This function handles Usage Fault exception. 78 * @param None 79 * @retval : None 80 */ 81 void UsageFault_Handler(void) 82 { 83 /* Go to infinite loop when Usage Fault exception occurs */ 84 while (1) 85 { 86 } 87 } 88 89 /** 90 * @brief This function handles SVCall exception. 91 * @param None 92 * @retval : None 93 */ 94 void SVC_Handler(void) 95 { 96 } 97 98 /** 99 * @brief This function handles Debug Monitor exception. 100 * @param None 101 * @retval : None 102 */ 103 void DebugMon_Handler(void) 104 { 105 } 106 107 /** 108 * @brief This function handles PendSV_Handler exception. 109 * @param None 110 * @retval : None 111 */ 112 void PendSV_Handler(void) 113 { 114 } 115 116 /** 117 * @brief This function handles SysTick Handler. 118 * @param None 119 * @retval : None 120 */ 121 void SysTick_Handler(void) 122 { 123 } 124 125 126 127 /**************************************************************************** 128 * 129 * 函数名称:void TIM3_IRQHandler(void) 130 * 外部中断处理函数 131 * 132 ****************************************************************************/ 133 134 135 void TIM3_IRQHandler(void) 136 { 137 TIM_ClearITPendingBit(TIM3,TIM_IT_Update); 138 139 if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5)==Bit_RESET) 140 { 141 if(GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5)==Bit_RESET) 142 { 143 //LED 熄灭 144 GPIO_SetBits(GPIOB,GPIO_Pin_5); 145 } 146 else 147 { 148 //LED 发光 149 GPIO_ResetBits(GPIOB,GPIO_Pin_5); 150 } 151 } 152 153 } 154 155 156 157 158 /**************************************************************************** 159 * 160 * 函数名称:void EXTI9_5_IRQHandler(void) 161 * 外部中断处理函数 162 * 163 ****************************************************************************/ 164 void EXTI9_5_IRQHandler(void) 165 { 166 if(EXTI_GetITStatus(EXTI_Line5)==SET) //判断是否产生了中断 167 { 168 EXTI_ClearITPendingBit(EXTI_Line5);//中断清除 169 170 delay_ms(10);//延时消抖 171 172 if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5)==Bit_RESET) //再次判断,消抖 173 { 174 if(GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5)==Bit_RESET)//如果LED是亮 175 { 176 GPIO_SetBits(GPIOB,GPIO_Pin_5); //则熄灭 177 } 178 else 179 { 180 GPIO_ResetBits(GPIOB,GPIO_Pin_5);//如果是熄灭的,就亮 181 } 182 } 183 } 184 } 185 186 187 188 189 190 191 192 193 194 /**************************************************************************** 195 * Ļ Ԇúvoid EXTI1_IRQHandler(void) 196 * ٦ ŜúEXTI2אԦmԌѲ 197 * ɫࠚӎ˽úϞ 198 * Զࠚӎ˽úϞ 199 * ˵ ķú 200 * ַԃרúϞ 201 ****************************************************************************/ 202 void EXTI1_IRQHandler(void) 203 { 204 205 } 206 207 /**************************************************************************** 208 * Ļ Ԇúvoid EXTI2_IRQHandler(void) 209 * ٦ ŜúEXTI2אԦmԌѲ 210 * ɫࠚӎ˽úϞ 211 * Զࠚӎ˽úϞ 212 * ˵ ķú 213 * ַԃרúϞ 214 ****************************************************************************/ 215 void EXTI2_IRQHandler(void) 216 { 217 218 } 219 220 /**************************************************************************** 221 * 222 * 函数名称:void EXTI3_IRQHandler(void) 223 * 函数功能:外部中断XTI3中断处理函数 224 * 225 ****************************************************************************/ 226 void EXTI3_IRQHandler(void) 227 { 228 229 230 } 231 232 233 /**************************************************************************** 234 * 235 * 函数名称:USART1_IRQHandler(void) 236 * 函数功能:串口中断1处理函数 237 * 238 ****************************************************************************/ 239 void USART1_IRQHandler(void) 240 { 241 242 if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)//判断是否发生了串口中断 243 { 244 245 USART_SendData(USART1,USART_ReceiveData(USART1));//从串口中读取数据,然后发送出去 246 247 while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//等待发送完成,判断标志位 248 249 } 250 } 251 252 253 254 255 /**************************************************************************** 256 * 257 * 函数名称:RTC_IRQHandler(void) 258 * 函数功能:RTC中断配置 259 * 260 ****************************************************************************/ 261 262 263 void RTC_IRQHandler(void)//RTC中断函数 264 { 265 if(RTC_GetITStatus(RTC_IT_SEC)!=RESET)//判断是否有中断 266 { 267 RTC_ClearITPendingBit(RTC_IT_SEC);//清除中断标志 268 269 tim_bz=1;//秒中断标志 270 } 271 }
1 /**************************************************************************************************************** 2 * 3 * 文件名称:pbdata.c 4 * 文件功能:自定义函数或者全局变量的初始化 5 * 6 ****************************************************************************************************************/ 7 8 /*头文件声明*/ 9 #include "pbdata.h" 10 11 12 13 14 /******************************************************************************************** 15 * 16 * 自定义全局变量 17 * 18 ********************************************************************************************/ 19 u8 dt=0; 20 21 u8 tim_bz=0; 22 23 24 25 /****************************************************************************************** 26 * 27 * 自定义函数 28 * 29 ******************************************************************************************/ 30 31 32 33 /************************************************** 34 * 35 * 函数名称:delay_us(u32 nus) 36 * 函数功能:微秒延时函数 37 * 输入参数:输入值为延时us 38 * 39 ***************************************************/ 40 void delay_us(u32 nus) 41 { 42 u32 temp; 43 SysTick->LOAD = 9*nus;//载入初值,72M/8=9M,也就是1/9us,9*1/9us,所以是执行9次 44 SysTick->VAL=0X00;//清空计数器,清空后,就自动设置自己设定的计数器的值 45 SysTick->CTRL=0X01;//使能,减到零动作(不发生中断),采用外部时钟 46 47 do 48 { 49 temp=SysTick->CTRL;//标志位,等到一直减到0 50 }while((temp&0x01)&&(!(temp&(1<<16))));//等待时间到达 51 52 SysTick->CTRL=0x00; //关闭计数器 53 SysTick->VAL =0X00; //清空计数器 54 } 55 56 57 58 59 60 61 62 /*************************************************** 63 * 64 * 函数名称:delay_ms(u16 nms) 65 * 函数功能:毫秒级延时 66 * 输入参数:输入值位延时ms 67 * 68 ****************************************************/ 69 void delay_ms(u16 nms) 70 { 71 u32 temp; 72 SysTick->LOAD = 9000*nms;//载入初值,72M/8=9M,也就是1/9us,9*1/9us,所以是执行9000次 73 SysTick->VAL=0X00;//清空计数器,清空后,就自动设置自己设定的计数器的值 74 SysTick->CTRL=0X01;//使能,减到零动作(不发生中断),采用外部时钟 75 76 do 77 { 78 temp=SysTick->CTRL;//标志位,等到一直减到0 79 }while((temp&0x01)&&(!(temp&(1<<16))));//等待时间到达 80 81 SysTick->CTRL=0x00; //关闭计数器 82 SysTick->VAL =0X00; //清空计数器 83 } 84 85 86 87 /**************************************************** 88 * 89 * 重定义printf函数部分 90 * 91 ****************************************************/ 92 int fputc(int ch,FILE *F) 93 { 94 95 USART_SendData(USART1,(u8)ch); 96 97 while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//等待发送完成,判断标志位 98 99 return ch; 100 }
1 /*pbdata.h*/ 2 /*************************************************************************************************** 3 * 4 * 文件名称:pbdata.h 5 * 文件功能:自定义的函数和全局变量的声明头文件 6 * 7 ***************************************************************************************************/ 8 9 #ifndef _pbdata_H 10 #define _pbdata_H 11 12 13 14 15 16 /******************************************************************** 17 * 18 * 调用的头文件放在这里 19 * 20 ********************************************************************/ 21 #include "stm32f10x.h" 22 23 24 #include "stm32f10x_rcc.h" 25 #include "stm32f10x_gpio.h" 26 #include "misc.h" 27 #include "stm32f10x_adc.h" 28 #include "stm32f10x_bkp.h" 29 #include "stm32f10x_can.h" 30 #include "stm32f10x_cec.h" 31 #include "stm32f10x_dac.h" 32 #include "stm32f10x_dbgmcu.h" 33 #include "stm32f10x_dma.h" 34 #include "stm32f10x_exti.h" 35 #include "stm32f10x_flash.h" 36 #include "stm32f10x_fsmc.h" 37 #include "stm32f10x_i2c.h" 38 #include "stm32f10x_iwdg.h" 39 #include "stm32f10x_pwr.h" 40 #include "stm32f10x_rtc.h" 41 #include "stm32f10x_sdio.h" 42 #include "stm32f10x_spi.h" 43 #include "stm32f10x_tim.h" 44 #include "stm32f10x_usart.h" 45 #include "stm32f10x_wwdg.h" 46 47 48 #include "stdio.h" 49 50 51 52 53 /******************************************************************** 54 * 55 * 自定义全局变量声明 56 * 57 ********************************************************************/ 58 extern u8 dt; 59 60 extern u8 tim_bz; 61 62 63 64 /******************************************************************** 65 * 66 * 自定义全函数声明 67 * 68 ********************************************************************/ 69 void delay(u32 nCount); 70 void delay_us(u32 nus); 71 void delay_ms(u16 nms); 72 int fputc(int ch,FILE *F); 73 74 75 76 #endif
10、
http://download.csdn.net/detail/a1181803348/8758805