bsp.c
上传用户:yj_qqy
上传日期:2017-01-28
资源大小:2911k
文件大小:28k
源码类别:

uCOS

开发平台:

C/C++

  1. /*
  2. *********************************************************************************************************
  3. *                                     MICIRUM BOARD SUPPORT PACKAGE
  4. *
  5. *                             (c) Copyright 2007; Micrium, Inc.; Weston, FL
  6. *
  7. *               All rights reserved.  Protected by international copyright laws.
  8. *               Knowledge of the source code may NOT be used to develop a similar product.
  9. *               Please help us continue to provide the Embedded community with the finest
  10. *               software available.  Your honesty is greatly appreciated.
  11. *********************************************************************************************************
  12. */
  13. /*
  14. *********************************************************************************************************
  15. *
  16. *                                        BOARD SUPPORT PACKAGE
  17. *
  18. *                                     ST Microelectronics STM32
  19. *                                              with the
  20. *                                   STM3210B-EVAL Evaluation Board
  21. *
  22. * Filename      : bsp.c
  23. * Version       : V1.10
  24. * Programmer(s) : BAN
  25. *********************************************************************************************************
  26. */
  27. /*
  28. *********************************************************************************************************
  29. *                                             INCLUDE FILES
  30. *********************************************************************************************************
  31. */
  32. #define  BSP_MODULE
  33. #include <bsp.h>
  34. /*
  35. *********************************************************************************************************
  36. *                                            LOCAL DEFINES
  37. *********************************************************************************************************
  38. */
  39.                                                                 /* -------------------- GPIOA PINS -------------------- */
  40. #define  BSP_GPIOA_UART2_TX                       DEF_BIT_02
  41. #define  BSP_GPIOA_UART2_RX                       DEF_BIT_03
  42. #define  BSP_GPIOA_UART1_TX                       DEF_BIT_09
  43. #define  BSP_GPIOA_UART1_RX                       DEF_BIT_10
  44.                                                                 /* -------------------- GPIOB PINS -------------------- */
  45.                                                                 /* -------------------- GPIOC PINS -------------------- */
  46. #define  BSP_GPIOC_LED_RED                        DEF_BIT_06
  47. #define  BSP_GPIOC_LED_GRN                        DEF_BIT_07
  48. #define  BSP_GPIOC_USB_DISCONNECT                 DEF_BIT_09
  49. /*
  50. *********************************************************************************************************
  51. *                                           LOCAL CONSTANTS
  52. *********************************************************************************************************
  53. */
  54. /*
  55. *********************************************************************************************************
  56. *                                          LOCAL DATA TYPES
  57. *********************************************************************************************************
  58. */
  59. /*
  60. *********************************************************************************************************
  61. *                                            LOCAL TABLES
  62. *********************************************************************************************************
  63. */
  64. /*
  65. *********************************************************************************************************
  66. *                                       LOCAL GLOBAL VARIABLES
  67. *********************************************************************************************************
  68. */
  69. /*
  70. *********************************************************************************************************
  71. *                                      LOCAL FUNCTION PROTOTYPES
  72. *********************************************************************************************************
  73. */
  74. static  void  BSP_ADC_Init     (void);
  75. static  void  BSP_LED_Init     (void);
  76. #if DEBUG_MODULE == DEF_ENABLED
  77. static  void  Debug_InitTarget     (void);
  78. #endif
  79. static  void  ADC_RCVTabISRHandler   (void);
  80. INT8U ADC_CurConvCount = 0;
  81. INT32S  ADC_ValueMux[ADC_RCVTab_SIZE] = {0,0,0,0,0,0,0,0};
  82. INT32S ADC_Mittelwert[ADC_RCVTab_SIZE] = {0,0,0,0,0,0,0,0};
  83. INT32S ADC_Neutral[ADC_RCVTab_SIZE] = {0,0,0,0,0,0,0,0};
  84. /*
  85. *********************************************************************************************************
  86. *                                     LOCAL CONFIGURATION ERRORS
  87. *********************************************************************************************************
  88. */
  89. /*
  90. *********************************************************************************************************
  91. *                                               BSP_Init()
  92. *
  93. * Description : Initialize the Board Support Package (BSP).
  94. *
  95. * Argument(s) : none.
  96. *
  97. * Return(s)   : none.
  98. *
  99. * Caller(s)   : Application.
  100. *
  101. * Note(s)     : (1) This function SHOULD be called before any other BSP function is called.
  102. *********************************************************************************************************
  103. */
  104. void  BSP_Init (void)
  105. {
  106. //BSP_IntInit();
  107.     RCC_DeInit();
  108.     RCC_HSEConfig(RCC_HSE_ON);
  109. if(RCC_WaitForHSEStartUp() == SUCCESS)
  110. {
  111.     RCC_HCLKConfig(RCC_SYSCLK_Div1);
  112.     RCC_PCLK2Config(RCC_HCLK_Div1);
  113.     RCC_PCLK1Config(RCC_HCLK_Div2);
  114.     RCC_ADCCLKConfig(RCC_PCLK2_Div6);
  115.     FLASH_SetLatency(FLASH_Latency_2);
  116.     FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
  117.     RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
  118.     RCC_PLLCmd(ENABLE);
  119.     while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
  120.     RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
  121.     while (RCC_GetSYSCLKSource() != 0x08);
  122. }
  123.     BSP_ADC_Init();                                             /* Initialize the I/Os for the ADC      controls.       */
  124.     BSP_LED_Init();                                             /* Initialize the I/Os for the LED      controls.       */
  125. #if (DEBUG_MODULE == DEF_ENABLED)
  126. Debug_InitTarget();
  127. #endif
  128. }
  129. /*
  130. *********************************************************************************************************
  131. *                                            BSP_CPU_ClkFreq()
  132. *
  133. * Description : Read CPU registers to determine the CPU clock frequency of the chip.
  134. *
  135. * Argument(s) : none.
  136. *
  137. * Return(s)   : The CPU clock frequency, in Hz.
  138. *
  139. * Caller(s)   : Application.
  140. *
  141. * Note(s)     : none.
  142. *********************************************************************************************************
  143. */
  144. CPU_INT32U  BSP_CPU_ClkFreq (void)
  145. {
  146.     RCC_ClocksTypeDef  rcc_clocks;
  147.     RCC_GetClocksFreq(&rcc_clocks);
  148.     return ((CPU_INT32U)rcc_clocks.SYSCLK_Frequency);
  149. }
  150. /*
  151. *********************************************************************************************************
  152. *********************************************************************************************************
  153. *                                         OS CORTEX-M3 FUNCTIONS
  154. *********************************************************************************************************
  155. *********************************************************************************************************
  156. */
  157. /*
  158. *********************************************************************************************************
  159. *                                         OS_CPU_SysTickClkFreq()
  160. *
  161. * Description : Get system tick clock frequency.
  162. *
  163. * Argument(s) : none.
  164. *
  165. * Return(s)   : Clock frequency (of system tick).
  166. *
  167. * Caller(s)   : BSP_Init().
  168. *
  169. * Note(s)     : none.
  170. *********************************************************************************************************
  171. */
  172. INT32U  OS_CPU_SysTickClkFreq (void)
  173. {
  174.     INT32U  freq;
  175.     freq = BSP_CPU_ClkFreq();
  176.     return (freq);
  177. }
  178. /*
  179. *********************************************************************************************************
  180. *********************************************************************************************************
  181. *                                              ADC FUNCTIONS
  182. *********************************************************************************************************
  183. *********************************************************************************************************
  184. */
  185. /*
  186. *********************************************************************************************************
  187. *                                             BSP_ADC_Init()
  188. *
  189. * Description : Initialize the board's ADC
  190. *
  191. * Argument(s) : none.
  192. *
  193. * Return(s)   : none.
  194. *
  195. * Caller(s)   : BSP_Init().
  196. *
  197. * Note(s)     : none.
  198. *********************************************************************************************************
  199. */
  200. static void  BSP_ADC_Init (void)
  201. {
  202. GPIO_InitTypeDef GPIO_InitStructure;
  203. /* Enable peripheral clocks --------------------------------------------------*/
  204.     BSP_PeriphEn(BSP_PERIPH_ID_IOPA);
  205.     BSP_PeriphEn(BSP_PERIPH_ID_IOPC);
  206.     BSP_PeriphEn(BSP_PERIPH_ID_ADC1);
  207.     BSP_PeriphEn(BSP_PERIPH_ID_DMA1);
  208. /* Enable clock */
  209. RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
  210. RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
  211. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  212. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
  213. GPIO_Init(GPIOA, &GPIO_InitStructure);
  214. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
  215. GPIO_Init(GPIOC, &GPIO_InitStructure);
  216. /* DMA1 channel1 configuration ----------------------------------------------*/
  217. DMA_DeInit(DMA1_Channel1);
  218. DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address; //外设地址
  219. DMA_InitStructure.DMA_MemoryBaseAddr = (INT32U)&ADC_RCVTab; //内存地址
  220. DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; //DMA传输方向单向
  221. DMA_InitStructure.DMA_BufferSize = ADC_RCVTab_SIZE; //设置DMA在传输时缓冲区的长度 WORD
  222. DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //设置DMA的外设递增模式, 一个外设
  223. DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //设置DMA的内存递增模式
  224. DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; //外设数据字长
  225. DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; //内存数据字长
  226. DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; //设置DMA的传输模式:Circular循环模式/Normal普通模式
  227. DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh; //设置DMA的优先级别
  228. DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; //设置DMA的2个memory中的变量互相访问
  229. DMA_Init(DMA1_Channel1, &DMA_InitStructure);
  230.     BSP_IntVectSet(BSP_INT_ID_DMA1_CH1, ADC_RCVTabISRHandler);
  231. BSP_IntEn(BSP_INT_ID_DMA1_CH1);
  232. /* Enable DMA DMA1_Channel1 complete transfer interrupt */ 
  233. DMA_ITConfig(DMA1_Channel1, DMA_IT_TC, ENABLE);  
  234. /* Enable DMA1 channel1 */
  235. DMA_Cmd(DMA1_Channel1, ENABLE);
  236. /* ADC1 configuration ------------------------------------------------------*/
  237. ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //独立工作模式
  238. ADC_InitStructure.ADC_ScanConvMode = ENABLE; //扫描方式
  239. ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; //连续转换关闭
  240. ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //外部触发禁止
  241. ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //数据右对齐
  242. ADC_InitStructure.ADC_NbrOfChannel = ADC_RCVTab_SIZE; //用于转换的通道数
  243. ADC_Init(ADC1, &ADC_InitStructure);
  244. /* ADC1 regular channels configuration [ADC1配置通道规则]*/ 
  245. ADC_RegularChannelConfig(ADC1, ADC_Channel_0 , 1, ADC_SampleTime_1Cycles5); //NICK
  246. ADC_RegularChannelConfig(ADC1, ADC_Channel_2 , 2, ADC_SampleTime_1Cycles5); //ROLL
  247. ADC_RegularChannelConfig(ADC1, ADC_Channel_3,  3, ADC_SampleTime_1Cycles5); //GIER
  248. ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 4, ADC_SampleTime_1Cycles5); //X  
  249. ADC_RegularChannelConfig(ADC1, ADC_Channel_12, 5, ADC_SampleTime_1Cycles5); //Y
  250. ADC_RegularChannelConfig(ADC1, ADC_Channel_13, 6, ADC_SampleTime_1Cycles5); //Z
  251. ADC_RegularChannelConfig(ADC1, ADC_Channel_1,  7, ADC_SampleTime_1Cycles5); //气压
  252. ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 8, ADC_SampleTime_1Cycles5); //电压  
  253. /* Enable ADC1 DMA [ADC1使能DMA]*/
  254. ADC_DMACmd(ADC1, ENABLE);
  255. /* Enable ADC1 [ADC1使能]*/
  256. ADC_Cmd(ADC1, ENABLE);  
  257. /* Enable ADC1 reset calibaration register */   
  258. ADC_ResetCalibration(ADC1);
  259. /* Check the end of ADC1 reset calibration register */
  260. while(ADC_GetResetCalibrationStatus(ADC1));
  261. /* Start ADC1 calibaration */
  262. ADC_StartCalibration(ADC1);
  263. /* Check the end of ADC1 calibration */
  264. while(ADC_GetCalibrationStatus(ADC1));
  265. }
  266. void  ADC_RCVTabISRHandler (void)
  267. {
  268.     CPU_SR          cpu_sr;
  269.     CPU_CRITICAL_ENTER();                                       /* Tell uC/OS-II that we are starting an ISR            */
  270.     OSIntNesting++;
  271.     CPU_CRITICAL_EXIT();
  272.     if (DMA_GetITStatus(DMA1_IT_TC1) != RESET) {
  273. ADC_CurConvCount++;
  274. ADC_ValueMux[ADC_NICK] += ADC_RCVTab[ADC_NICK] - ADC_Neutral[ADC_NICK];
  275. ADC_ValueMux[ADC_ROLL] += ADC_RCVTab[ADC_ROLL] - ADC_Neutral[ADC_ROLL];
  276. ADC_ValueMux[ADC_GIER] += ADC_Neutral[ADC_GIER] - ADC_RCVTab[ADC_GIER];
  277. ADC_ValueMux[ADC_ACCX] += ADC_Neutral[ADC_ACCX] - ADC_RCVTab[ADC_ACCX];
  278. ADC_ValueMux[ADC_ACCY] += ADC_RCVTab[ADC_ACCY] - ADC_Neutral[ADC_ACCY];
  279. ADC_ValueMux[ADC_ACCZ] += ADC_Neutral[ADC_ACCZ] - ADC_RCVTab[ADC_ACCZ];
  280. if(ADC_CurConvCount >= ADC_CONV_COUNT) {
  281. ADC_Mittelwert[ADC_NICK] = ADC_ValueMux[ADC_NICK] / ADC_CONV_COUNT;
  282. ADC_Mittelwert[ADC_ROLL] = ADC_ValueMux[ADC_ROLL] / ADC_CONV_COUNT;
  283. ADC_Mittelwert[ADC_GIER] = ADC_ValueMux[ADC_GIER] / ADC_CONV_COUNT;
  284. ADC_Mittelwert[ADC_ACCX] = ADC_ValueMux[ADC_ACCX] / ADC_CONV_COUNT;
  285. ADC_Mittelwert[ADC_ACCY] = ADC_ValueMux[ADC_ACCY] / ADC_CONV_COUNT;
  286. ADC_Mittelwert[ADC_ACCZ] = ADC_ValueMux[ADC_ACCZ] / ADC_CONV_COUNT;
  287. ADC_ValueMux[ADC_NICK] = 0;
  288. ADC_ValueMux[ADC_ROLL] = 0;
  289. ADC_ValueMux[ADC_GIER] = 0;
  290. ADC_ValueMux[ADC_ACCX] = 0;
  291. ADC_ValueMux[ADC_ACCZ] = 0;
  292. ADC_ValueMux[ADC_ACCY] = 0;
  293. ADC_ValueMux[6] = 0;
  294. ADC_ValueMux[7] = 0;
  295. ADC_CurConvCount = 0;
  296. OSSemPost(App_ADCSem);
  297. }else {
  298. ADC_SoftwareStartConvCmd(ADC1, ENABLE);
  299. }
  300. DMA_ClearITPendingBit(DMA1_IT_TC1);
  301.     }
  302.     OSIntExit();                                                /* Tell uC/OS-II that we are leaving the ISR            */
  303. }
  304. /*
  305. *********************************************************************************************************
  306. *                                           BSP_ADC_GetStatus()
  307. *
  308. * Description : This function initializes the board's ADC
  309. *
  310. * Argument(s) : adc             ID of the ADC to probe.  For this board, the only legitimate value is 1.
  311. *
  312. * Return(s)   : The numerator of the binary fraction representing the result of the latest ADC conversion.
  313. *               This value will be a 12-bit value between 0x0000 and 0x0FFF, inclusive.
  314. *
  315. * Caller(s)   : Application.
  316. *
  317. * Note(s)     : none.
  318. *********************************************************************************************************
  319. */
  320. CPU_INT16U  BSP_ADC_GetStatus (CPU_INT08U  adc)
  321. {
  322.     CPU_INT16U  result;
  323.     result = 0;
  324.     if (adc == 1) {
  325.         result = ADC_GetConversionValue(ADC1);
  326.     }
  327.     return (result);
  328. }
  329. /*
  330. *********************************************************************************************************
  331. *********************************************************************************************************
  332. *                                              LED FUNCTIONS
  333. *********************************************************************************************************
  334. *********************************************************************************************************
  335. */
  336. /*
  337. *********************************************************************************************************
  338. *                                             BSP_LED_Init()
  339. *
  340. * Description : Initialize the I/O for the LEDs
  341. *
  342. * Argument(s) : none.
  343. *
  344. * Return(s)   : none.
  345. *
  346. * Caller(s)   : BSP_Init().
  347. *
  348. * Note(s)     : none.
  349. *********************************************************************************************************
  350. */
  351. static  void  BSP_LED_Init (void)
  352. {
  353.     GPIO_InitTypeDef  gpio_init;
  354.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
  355.     gpio_init.GPIO_Pin   = BSP_GPIOC_LED_RED | BSP_GPIOC_LED_GRN;
  356.     gpio_init.GPIO_Speed = GPIO_Speed_50MHz;
  357.     gpio_init.GPIO_Mode  = GPIO_Mode_Out_PP;
  358.     GPIO_Init(GPIOC, &gpio_init);
  359. }
  360. /*
  361. *********************************************************************************************************
  362. *                                             BSP_LED_On()
  363. *
  364. * Description : Turn ON any or all the LEDs on the board.
  365. *
  366. * Argument(s) : led     The ID of the LED to control:
  367. *
  368. *                       0    turn ON all LEDs on the board
  369. *                       1    turn ON LED RED
  370. *                       2    turn ON LED GRN
  371. *
  372. * Return(s)   : none.
  373. *
  374. * Caller(s)   : Application.
  375. *
  376. * Note(s)     : none.
  377. *********************************************************************************************************
  378. */
  379. void  BSP_LED_On (CPU_INT08U led)
  380. {
  381.     switch (led) {
  382.         case 0:
  383.              GPIO_SetBits(GPIOC, BSP_GPIOC_LED_RED | BSP_GPIOC_LED_GRN);
  384.              break;
  385.         case 1:
  386.              GPIO_SetBits(GPIOC, BSP_GPIOC_LED_RED);
  387.              break;
  388.         case 2:
  389.              GPIO_SetBits(GPIOC, BSP_GPIOC_LED_GRN);
  390.              break;
  391.         default:
  392.              break;
  393.     }
  394. }
  395. /*
  396. *********************************************************************************************************
  397. *                                              BSP_LED_Off()
  398. *
  399. * Description : Turn OFF any or all the LEDs on the board.
  400. *
  401. * Argument(s) : led     The ID of the LED to control:
  402. *
  403. *                       0    turn OFF all LEDs on the board
  404. *                       1    turn OFF LED RED
  405. *                       2    turn OFF LED GRN
  406. *
  407. * Return(s)   : none.
  408. *
  409. * Caller(s)   : Application.
  410. *
  411. * Note(s)     : none.
  412. *********************************************************************************************************
  413. */
  414. void  BSP_LED_Off (CPU_INT08U led)
  415. {
  416.     switch (led) {
  417.         case 0:
  418.              GPIO_ResetBits(GPIOC, BSP_GPIOC_LED_RED | BSP_GPIOC_LED_GRN);
  419.              break;
  420.         case 1:
  421.              GPIO_ResetBits(GPIOC, BSP_GPIOC_LED_RED);
  422.              break;
  423.         case 2:
  424.              GPIO_ResetBits(GPIOC, BSP_GPIOC_LED_GRN);
  425.              break;
  426.         default:
  427.              break;
  428.     }
  429. }
  430. /*
  431. *********************************************************************************************************
  432. *                                            BSP_LED_Toggle()
  433. *
  434. * Description : TOGGLE any or all the LEDs on the board.
  435. *
  436. * Argument(s) : led     The ID of the LED to control:
  437. *
  438. *                       0    TOGGLE all LEDs on the board
  439. *                       1    TOGGLE LED RED
  440. *                       2    TOGGLE LED GRN
  441. *
  442. * Return(s)   : none.
  443. *
  444. * Caller(s)   : Application.
  445. *
  446. * Note(s)     : none.
  447. *********************************************************************************************************
  448. */
  449. void  BSP_LED_Toggle (CPU_INT08U led)
  450. {
  451.     CPU_INT32U  pins;
  452.     pins = GPIO_ReadOutputData(GPIOC);
  453.     switch (led) {
  454.         case 0:
  455.              BSP_LED_Toggle(1);
  456.              BSP_LED_Toggle(2);
  457.              break;
  458.         case 1:
  459.              if ((pins & BSP_GPIOC_LED_RED) == 0) {
  460.                  GPIO_SetBits(  GPIOC, BSP_GPIOC_LED_RED);
  461.              } else {
  462.                  GPIO_ResetBits(GPIOC, BSP_GPIOC_LED_RED);
  463.              }
  464.             break;
  465.         case 2:
  466.              if ((pins & BSP_GPIOC_LED_GRN) == 0) {
  467.                  GPIO_SetBits(  GPIOC, BSP_GPIOC_LED_GRN);
  468.              } else {
  469.                  GPIO_ResetBits(GPIOC, BSP_GPIOC_LED_GRN);
  470.              }
  471.             break;
  472.         default:
  473.              break;
  474.     }
  475. }
  476. /*
  477. *********************************************************************************************************
  478. *********************************************************************************************************
  479. **                                          uC/OS-View FUNCTIONS
  480. *********************************************************************************************************
  481. *********************************************************************************************************
  482. */
  483. /*
  484. *********************************************************************************************************
  485. *                                              OSView_TmrInit()
  486. *
  487. * Description : Select & initialize a timer for use with uC/OS-View.
  488. *
  489. * Argument(s) : none.
  490. *
  491. * Return(s)   : none.
  492. *********************************************************************************************************
  493. */
  494. #if (OS_VIEW_MODULE   == DEF_ENABLED)
  495. void  OSView_TmrInit (void)
  496. {
  497.     TIM_TimeBaseInitTypeDef  tim_init;
  498.     tim_init.TIM_Period        = 0xFFFF;
  499.     tim_init.TIM_Prescaler     = 0x00;
  500.     tim_init.TIM_ClockDivision = 0x0;
  501.     tim_init.TIM_CounterMode   = TIM_CounterMode_Up;
  502. #if (OS_VIEW_TIMER_SEL == 2)
  503.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
  504.     TIM_TimeBaseInit(TIM2, &tim_init);
  505.     TIM_SetCounter(TIM2, 0);
  506.     TIM_PrescalerConfig(TIM2, 256, TIM_PSCReloadMode_Immediate);
  507.     TIM_Cmd(TIM2, ENABLE);
  508. #elif (OS_VIEW_TIMER_SEL == 3)
  509.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
  510.     TIM_TimeBaseInit(TIM3, &tim_init);
  511.     TIM_SetCounter(TIM3, 0);
  512.     TIM_PrescalerConfig(TIM3, 256, TIM_PSCReloadMode_Immediate);
  513.     TIM_Cmd(TIM3, ENABLE);
  514. #elif (OS_VIEW_TIMER_SEL == 4)
  515.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
  516.     TIM_TimeBaseInit(TIM4, &tim_init);
  517.     TIM_SetCounter(TIM4, 0);
  518.     TIM_PrescalerConfig(TIM4, 256, TIM_PSCReloadMode_Immediate);
  519.     TIM_Cmd(TIM4, ENABLE);
  520. #endif
  521. }
  522. #endif
  523. /*
  524. *********************************************************************************************************
  525. *                                         OSView_TmrRd()
  526. *
  527. * Description : Read the current counts of a 32-bit free running timer.
  528. *
  529. * Argument(s) : none.
  530. *
  531. * Return(s)   : The 32 bit counts of the timer.
  532. *********************************************************************************************************
  533. */
  534. #if (OS_VIEW_MODULE   == DEF_ENABLED)
  535. CPU_INT32U  OSView_TmrRd (void)
  536. {
  537. #if (OS_VIEW_TIMER_SEL == 2)
  538.     return ((CPU_INT32U)TIM_GetCounter(TIM2));
  539. #elif (OS_VIEW_TIMER_SEL == 3)
  540.     return ((CPU_INT32U)TIM_GetCounter(TIM3));
  541. #elif (OS_VIEW_TIMER_SEL == 4)
  542.     return ((CPU_INT32U)TIM_GetCounter(TIM4));
  543. #endif
  544. }
  545. #endif
  546. /*
  547. *********************************************************************************************************
  548. *                                    INITIALISE DEBUG COM PORT
  549. *********************************************************************************************************
  550. */
  551. #if (DEBUG_MODULE == DEF_ENABLED)
  552. static void  Debug_InitTarget ()
  553. {
  554.     GPIO_InitTypeDef        gpio_init;
  555.     USART_InitTypeDef       usart_init;
  556.     USART_ClockInitTypeDef  usart_clk_init;
  557.                                                                 /* ----------------- INIT USART STRUCT ---------------- */
  558.     usart_init.USART_BaudRate            = 115200;
  559.     usart_init.USART_WordLength          = USART_WordLength_8b;
  560.     usart_init.USART_StopBits            = USART_StopBits_1;
  561.     usart_init.USART_Parity              = USART_Parity_No ;
  562.     usart_init.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  563.     usart_init.USART_Mode                = USART_Mode_Rx | USART_Mode_Tx;
  564.     usart_clk_init.USART_Clock           = USART_Clock_Disable;
  565.     usart_clk_init.USART_CPOL            = USART_CPOL_Low;
  566.     usart_clk_init.USART_CPHA            = USART_CPHA_2Edge;
  567.     usart_clk_init.USART_LastBit         = USART_LastBit_Disable;
  568. #if (DEBUG_COMM_SEL == DEBUG_UART_1)
  569.     BSP_PeriphEn(BSP_PERIPH_ID_USART1);
  570.                                                                 /* ----------------- SETUP USART1 GPIO ---------------- */
  571.     BSP_PeriphEn(BSP_PERIPH_ID_IOPA);
  572.                                                                 /* Configure GPIOA.9 as push-pull                       */
  573.     gpio_init.GPIO_Pin   = GPIO_Pin_9;
  574.     gpio_init.GPIO_Speed = GPIO_Speed_50MHz;
  575.     gpio_init.GPIO_Mode  = GPIO_Mode_AF_PP;
  576.     GPIO_Init(GPIOA, &gpio_init);
  577.                                                                 /* Configure GPIOA.10 as input floating                 */
  578.     gpio_init.GPIO_Pin   = GPIO_Pin_10;
  579.     gpio_init.GPIO_Mode  = GPIO_Mode_IN_FLOATING;
  580.     GPIO_Init(GPIOA, &gpio_init);
  581.                                                                 /* ------------------ SETUP USART1 -------------------- */
  582.     USART_Init(USART1, &usart_init);
  583.     USART_ClockInit(USART1, &usart_clk_init);
  584.     USART_Cmd(USART1, ENABLE);
  585. #endif
  586. #if (DEBUG_COMM_SEL == DEBUG_UART_2)
  587.     BSP_PeriphEn(BSP_PERIPH_ID_USART2);
  588.                                                                 /* ----------------- SETUP USART2 GPIO ---------------- */
  589.     BSP_PeriphEn(BSP_PERIPH_ID_IOPA);
  590.                                                                 /* Configure GPIOA.2 as push-pull                       */
  591.     gpio_init.GPIO_Pin   = GPIO_Pin_2;
  592.     gpio_init.GPIO_Speed = GPIO_Speed_50MHz;
  593.     gpio_init.GPIO_Mode  = GPIO_Mode_AF_PP;
  594.     GPIO_Init(GPIOA, &gpio_init);
  595.                                                                 /* Configure GPIOA.3 as input floating                  */
  596.     gpio_init.GPIO_Pin   = GPIO_Pin_3;
  597.     gpio_init.GPIO_Mode  = GPIO_Mode_IN_FLOATING;
  598.     GPIO_Init(GPIOA, &gpio_init);
  599.                                                                 /* ------------------ SETUP USART2 -------------------- */
  600.     USART_Init(USART2, &usart_init);
  601.     USART_ClockInit(USART2, &usart_clk_init);
  602.     USART_Cmd(USART2, ENABLE);
  603. #endif
  604. #if (DEBUG_COMM_SEL == DEBUG_UART_3)
  605.     BSP_PeriphEn(BSP_PERIPH_ID_USART3);
  606.                                                                 /* ----------------- SETUP USART3 GPIO ---------------- */
  607.     BSP_PeriphEn(BSP_PERIPH_ID_IOPB);
  608.                                                                 /* Configure GPIOB.10 as push-pull                      */
  609.     gpio_init.GPIO_Pin   = GPIO_Pin_10;
  610.     gpio_init.GPIO_Speed = GPIO_Speed_50MHz;
  611.     gpio_init.GPIO_Mode  = GPIO_Mode_AF_PP;
  612.     GPIO_Init(GPIOB, &gpio_init);
  613.                                                                 /* Configure GPIOB.11 as input floating                 */
  614.     gpio_init.GPIO_Pin   = GPIO_Pin_11;
  615.     gpio_init.GPIO_Mode  = GPIO_Mode_IN_FLOATING;
  616.     GPIO_Init(GPIOB, &gpio_init);
  617.                                                                 /* ------------------ SETUP USART3 -------------------- */
  618.     USART_Init(USART3, &usart_init);
  619.     USART_ClockInit(USART3, &usart_clk_init);
  620.     USART_Cmd(USART3, ENABLE);
  621. #endif
  622. }
  623. /* Implementation of putchar (also used by printf function to output data)    */
  624. PUTCHAR_PROTOTYPE  {                /* Write character to Serial Port     */
  625.     USART_TypeDef  *usart;
  626. #if   (DEBUG_COMM_SEL == DEBUG_UART_1)
  627.     usart = USART1;
  628. #elif (DEBUG_COMM_SEL == DEBUG_UART_2)
  629.     usart = USART2;
  630. #elif (DEBUG_COMM_SEL == DEBUG_UART_3)
  631.     usart = USART3;
  632. #else
  633.     return;
  634. #endif
  635.   while (USART_GetFlagStatus(usart, USART_FLAG_TXE) == RESET);
  636.   USART_SendData(usart, (unsigned char) ch);
  637.   return (ch);
  638. }
  639. int GetKey (void)  {                    /* Read character from Serial Port    */
  640.     USART_TypeDef  *usart;
  641. #if   (DEBUG_COMM_SEL == DEBUG_UART_1)
  642.     usart = USART1;
  643. #elif (DEBUG_COMM_SEL == DEBUG_UART_2)
  644.     usart = USART2;
  645. #elif (DEBUG_COMM_SEL == DEBUG_UART_3)
  646.     usart = USART3;
  647. #else
  648.     return;
  649. #endif
  650.   while (USART_GetITStatus(usart, USART_IT_RXNE) != RESET);
  651.   return (USART_ReceiveData(usart));
  652. }
  653. #endif