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     
View Code
  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>&copy; 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 }
View Code
  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 }
View Code
 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
View Code

 

10、

http://download.csdn.net/detail/a1181803348/8758805

 

posted @ 2015-06-01 08:01  如风轻逸  阅读(1155)  评论(0编辑  收藏  举报