bsp.c
#include "..\App\includes.h"
/*******************************************************************************
* Function Name : RCC_Configuration
* Description : Configures the different system clocks.
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void RCC_Configuration(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |
RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO |
RCC_APB2Periph_USART1, ENABLE);
}
/*******************************************************************************
* Function Name : GPIO_Configuration
* Description : Configures the different GPIO ports.
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_WriteBit(GPIOB, GPIO_Pin_8, (BitAction)1);
//usart_init----------------------------------------------------
/* Configure USART1 Rx (PA.10) as input floating */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* Configure USART1 Tx (PA.09) as alternate function push-pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
/*******************************************************************************
* Function Name : NVIC_Configuration
* Description : Configures Vector Table base location.
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void NVIC_Configuration(void)
{
#if defined (VECT_TAB_RAM)
/* Set the Vector Table base location at 0x20000000 */
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#elif defined(VECT_TAB_FLASH_IAP)
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x2000);
#else /* VECT_TAB_FLASH */
/* Set the Vector Table base location at 0x08000000 */
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
#endif
/* Configure the NVIC Preemption Priority Bits */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
}
void BSP_Init(void)
{
/* System Clocks Configuration */
RCC_Configuration();
GPIO_Configuration();
/* NVIC configuration */
NVIC_Configuration();
USART1_InitConfig(9600);
}
CPU_INT32U BSP_CPU_ClkFreq (void)
{
RCC_ClocksTypeDef rcc_clocks;
RCC_GetClocksFreq(&rcc_clocks);
return ((CPU_INT32U)rcc_clocks.HCLK_Frequency);
}
INT32U OS_CPU_SysTickClkFreq (void)
{
INT32U freq;
freq = BSP_CPU_ClkFreq();
return (freq);
}
#ifdef DEBUG
/*******************************************************************************
* Function Name : assert_failed
* Description : Reports the name of the source file and the source line number
* where the assert_param error has occurred.
* Input : - file: pointer to the source file name
* - line: assert_param error line source number
* Output : None
* Return : None
*******************************************************************************/
void assert_failed(u8* file, u32 line)
{
/* User can add his own implementation to report the file name and line number,
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
/* Infinite loop */
while (1)
{
}
}
#endif
其实这个文件是跟OS无关的,主要是几个跟硬件有关的初始化操作,里面几个函数都是会被BSP_Init()调用,而BSP_Init会在系统初始化的时候去初始化硬件。
- RCC_Configuration(); //是CPU时钟树初始化
- GPIO_Configuration();//系统使用的GPIO初始化
- NVIC_Configuration();//中断优先级分组初始化
- USART1_InitConfig(9600); //串口1初始化,波特率9600
bsp.h
#if !defined( _BSP_H )
#define _BSP_H
void RCC_Configuration(void);
void GPIO_Configuration(void);
void NVIC_Configuration(void);
CPU_INT32U BSP_CPU_ClkFreq (void);
//INT32U OS_CPU_SysTickClkFreq (void);
void BSP_Init(void);
#ifdef DEBUG
void assert_failed(u8* file, u32 line)
#endif
/*
*********************************************************************************************************
* INT DEFINES
*********************************************************************************************************
*/
#define BSP_INT_ID_WWDG 0 /* Window WatchDog Interrupt */
#define BSP_INT_ID_PVD 1 /* PVD through EXTI Line detection Interrupt */
#define BSP_INT_ID_TAMPER 2 /* Tamper Interrupt */
#define BSP_INT_ID_RTC 3 /* RTC global Interrupt */
#define BSP_INT_ID_FLASH 4 /* FLASH global Interrupt */
#define BSP_INT_ID_RCC 5 /* RCC global Interrupt */
#define BSP_INT_ID_EXTI0 6 /* EXTI Line0 Interrupt */
#define BSP_INT_ID_EXTI1 7 /* EXTI Line1 Interrupt */
#define BSP_INT_ID_EXTI2 8 /* EXTI Line2 Interrupt */
#define BSP_INT_ID_EXTI3 9 /* EXTI Line3 Interrupt */
#define BSP_INT_ID_EXTI4 10 /* EXTI Line4 Interrupt */
#define BSP_INT_ID_DMA1_CH1 11 /* DMA1 Channel 1 global Interrupt */
#define BSP_INT_ID_DMA1_CH2 12 /* DMA1 Channel 2 global Interrupt */
#define BSP_INT_ID_DMA1_CH3 13 /* DMA1 Channel 3 global Interrupt */
#define BSP_INT_ID_DMA1_CH4 14 /* DMA1 Channel 4 global Interrupt */
#define BSP_INT_ID_DMA1_CH5 15 /* DMA1 Channel 5 global Interrupt */
#define BSP_INT_ID_DMA1_CH6 16 /* DMA1 Channel 6 global Interrupt */
#define BSP_INT_ID_DMA1_CH7 17 /* DMA1 Channel 7 global Interrupt */
#define BSP_INT_ID_ADC1_2 18 /* ADC1 et ADC2 global Interrupt */
#define BSP_INT_ID_USB_HP_CAN_TX 19 /* USB High Priority or CAN TX Interrupts */
#define BSP_INT_ID_USB_LP_CAN_RX0 20 /* USB Low Priority or CAN RX0 Interrupts */
#define BSP_INT_ID_CAN_RX1 21 /* CAN RX1 Interrupt */
#define BSP_INT_ID_CAN_SCE 22 /* CAN SCE Interrupt */
#define BSP_INT_ID_EXTI9_5 23 /* External Line[9:5] Interrupts */
#define BSP_INT_ID_TIM1_BRK 24 /* TIM1 Break Interrupt */
#define BSP_INT_ID_TIM1_UP 25 /* TIM1 Update Interrupt */
#define BSP_INT_ID_TIM1_TRG_COM 26 /* TIM1 Trigger and Commutation Interrupt */
#define BSP_INT_ID_TIM1_CC 27 /* TIM1 Capture Compare Interrupt */
#define BSP_INT_ID_TIM2 28 /* TIM2 global Interrupt */
#define BSP_INT_ID_TIM3 29 /* TIM3 global Interrupt */
#define BSP_INT_ID_TIM4 30 /* TIM4 global Interrupt */
#define BSP_INT_ID_I2C1_EV 31 /* I2C1 Event Interrupt */
#define BSP_INT_ID_I2C1_ER 32 /* I2C1 Error Interrupt */
#define BSP_INT_ID_I2C2_EV 33 /* I2C2 Event Interrupt */
#define BSP_INT_ID_I2C2_ER 34 /* I2C2 Error Interrupt */
#define BSP_INT_ID_SPI1 35 /* SPI1 global Interrupt */
#define BSP_INT_ID_SPI2 36 /* SPI2 global Interrupt */
#define BSP_INT_ID_USART1 37 /* USART1 global Interrupt */
#define BSP_INT_ID_USART2 38 /* USART2 global Interrupt */
#define BSP_INT_ID_USART3 39 /* USART3 global Interrupt */
#define BSP_INT_ID_EXTI15_10 40 /* External Line[15:10] Interrupts */
#define BSP_INT_ID_RTCAlarm 41 /* RTC Alarm through EXTI Line Interrupt */
#define BSP_INT_ID_USBWakeUp 42 /* USB WakeUp from suspend through EXTI Line Interrupt */
#define BSP_INT_ID_TIM8_BRK 43 /* TIM8 Break Interrupt */
#define BSP_INT_ID_TIM8_UP 44 /* TIM8 Update Interrupt */
#define BSP_INT_ID_TIM8_TRG_COM 45 /* TIM8 Trigger and Commutation Interrupt */
#define BSP_INT_ID_TIM8_CC 46 /* TIM8 Capture Compare Interrupt */
#define BSP_INT_ID_ADC3 47 /* ADC3 global Interrupt */
#define BSP_INT_ID_FSMC 48 /* FSMC global Interrupt */
#define BSP_INT_ID_SDIO 49 /* SDIO global Interrupt */
#define BSP_INT_ID_TIM5 50 /* TIM5 global Interrupt */
#define BSP_INT_ID_SPI3 51 /* SPI3 global Interrupt */
#define BSP_INT_ID_UART4 52 /* UART4 global Interrupt */
#define BSP_INT_ID_UART5 53 /* UART5 global Interrupt */
#define BSP_INT_ID_TIM6 54 /* TIM6 global Interrupt */
#define BSP_INT_ID_TIM7 55 /* TIM7 global Interrupt */
#define BSP_INT_ID_DMA2_CH1 56 /* DMA2 Channel 1 global Interrupt */
#define BSP_INT_ID_DMA2_CH2 57 /* DMA2 Channel 2 global Interrupt */
#define BSP_INT_ID_DMA2_CH3 58 /* DMA2 Channel 3 global Interrupt */
#define BSP_INT_ID_DMA2_CH4_5 59 /* DMA2 Channel 4 and DMA2 Channel 5 global Interrupt */
#endif
bsp.h:众所周知一般.h文件无外乎变量声明、函数声明、宏定义、数据结构定义等功能。
一开始声明在bsp.c中的几个函数,然后开始宏定义CM3(Cortex - M3)的外部中断号,这会在后来程序中用到。
define BSP_INT_ID_WWDG 0 /外部中断窗口看门狗中断号/
BSP文件夹分析就到这里,跟OS无关。