|
/**4 N% O! G0 d6 U4 G( O * @file Timer.c 4 t8 i- \1 D- h+ l * @author WB R&D Team - openmcu666- K& | p, W) X * @version V0.1 * @date 2015.7.9 * @brief Timer */ #include "Timer.h" 1 g: k5 j1 @6 Z% x4 ^ __IO uint32_t TimingDelay = 0; __IO uint32_t CaptureNumber = 0; __IO uint32_t PeriodValue = 0; /**5 X( a% A, z# x/ r' E0 _2 A * @brief Configures TIM5 to measure the LSI oscillator frequency. / M+ q; C: I+ v& y) T" r * @param None * @retval LSI Frequency+ c' ^2 ]4 M2 @2 P */; ^6 d% M4 c6 W2 _1 D uint32_t GetLSIFrequency(void); g% y7 E& M2 J) i1 }2 |0 q { NVIC_InitTypeDef NVIC_InitStructure; TIM_ICInitTypeDef TIM_ICInitStructure; RCC_ClocksTypeDef RCC_ClockFreq; . M) c; ]$ B0 q0 c+ ~# T# w# ? RCC_LSICmd(ENABLE); //使能LSI : X# ?9 t5 v9 M) N" B while (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET) //等待LSI稳定5 C& P+ p9 Z" |% [) q {# r9 |2 W, e$ ~' ^! k. l9 I- J; a }7 D! S$ j$ {9 z) d , j4 J6 I& ?& o# v" y+ X; f /* TIM5 configuration *******************************************************/ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE); //使能TIM5时钟$ V7 h0 \; E' U% ~9 v TIM_RemapConfig(TIM5, TIM5_LSI); //内部TIM5_CH4输入捕获连接到LSI时钟输出 TIM_PrescalerConfig(TIM5, 0, TIM_PSCReloadMode_Immediate); //设置预分频/ B/ _. V) c- o) g& j /* TIM5 configuration: Input Capture mode --------------------- The LSI oscillator is connected to TIM5 CH4 The Rising edge is used as active edge,3 |/ F/ x0 m$ C The TIM5 CCR4 is used to compute the frequency value ------------------------------------------------------------ */ TIM_ICInitStructure.TIM_Channel = TIM_Channel_4;9 C( T3 x4 O% W- ~2 P. Y TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;" U) ]1 c! E/ f; V TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV8; TIM_ICInitStructure.TIM_ICFilter = 0;. z$ s& U; j$ n1 H/ Y TIM_ICInit(TIM5, &TIM_ICInitStructure); /* Enable TIM5 Interrupt channel */ NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn;9 M4 e/ X) j& U# i2 @ NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;! b1 A7 V8 s- u6 } I: G4 x v NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);1 R5 J6 L+ k+ M5 ^0 ?) ^ @2 w 4 m9 A4 ]2 H/ J) Y0 O2 f3 G @ TIM_Cmd(TIM5, ENABLE); //启动计数器! @5 e+ z! q- t % n. ?9 @1 X* g: [ `; E8 N TIM5->SR = 0; //Reset the flags TIM_ITConfig(TIM5, TIM_IT_CC4, ENABLE); //启动CC4中断请求 /* Wait until the TIM5 get 2 LSI edges (refer to TIM5_IRQHandler() in stm32f4xx_it.c file) ******************************************************/ while(CaptureNumber != 2)5 Q# m8 `/ L- r- q: v1 o% k { } : x7 M6 A. `" q' _2 J+ S7 P TIM_DeInit(TIM5); //设置为复位后的默认值; H/ U; m" K9 l" i RCC_GetClocksFreq(&RCC_ClockFreq); //获取系统时钟,HCLK 和 PCLKx 频率5 m' b5 ~$ D" H, v2 C# m if ((RCC->CFGR & RCC_CFGR_PPRE1) == 0) //获取PCLK1预分频器 { ; l% V z4 A8 m8 T return ((RCC_ClockFreq.PCLK1_Frequency / PeriodValue) * 8);//PCLK1预分频器 }8 Z F/ d9 J8 D4 ^/ ^2 G' o1 l else/ ^ p, X6 y( d1 o5 J# b% P" h { # P% b: O/ D! X. \: f- v return (((2 * RCC_ClockFreq.PCLK1_Frequency) / PeriodValue) * 8) ; }- h6 W6 Z" z9 U) N `9 f+ G' m& E6 B% T }. c- \- F$ J4 v9 s: L, v9 d { ** 实验名:旺宝-红龙429-RNG实验* a' E- r' v0 F ** KEIL MDK-ARM Standard Version:V5.10 ** 软件库(keil) Version: unused ** 固件库(ST) Version: 1.5.0 ** 实验说明:+ X" k# W D6 N9 v& A 实验原理:4 J' `$ S/ s# W' B5 u 硬件连接:+ F6 u% m( ?; ^2 U$ b. I* ]1 [/ k 9 H+ @. z9 N j7 j 实验现象:程序运行后,串口打印RNG生成的32Bit随机数.5 U. F3 k# q- F! u **********************************/ / I0 Y# E: A# J3 x+ O- u) P 3 C0 m: q* |7 h3 s1 T ( J6 a) T7 o- e, c2 [3 h2 W * ?* c) E* D1 Y( _ u * u- X8 G! X# e+ g: s 0 X# J2 I/ R3 O* I# F |
ã11ã红é¾429_RNG(2015.10.10).rar
下载60.67 KB, 下载次数: 10
微信公众号
手机版
STM32F429开发板(简单,易学,实用)众筹