You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
221 lines
6.5 KiB
C
221 lines
6.5 KiB
C
/*
|
|
*********************************************************************************************************
|
|
* INCLUDE FILES
|
|
*********************************************************************************************************
|
|
*/
|
|
#define BSP_MODULE
|
|
|
|
#include <bsp.h>
|
|
#include <stdio.h>
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* LOCAL TABLES
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* LOCAL GLOBAL VARIABLES
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* LOCAL FUNCTION PROTOTYPES
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
/**
|
|
* RCC configuration
|
|
*/
|
|
static void RCC_Configuration(void)
|
|
{
|
|
//下面是给各模块开启时钟
|
|
//启动GPIO
|
|
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | \
|
|
RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | \
|
|
RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOG,
|
|
ENABLE);
|
|
|
|
//启动AFIO
|
|
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
|
|
//启动USART1时钟
|
|
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
|
|
//启动USART2时钟
|
|
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
|
|
//启动DMA时钟
|
|
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
|
|
/* Enable ADC1 and GPIOC clock */
|
|
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
|
|
/* Enable WWDG clock */
|
|
RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);
|
|
}
|
|
|
|
/**
|
|
* NVIC Configuration
|
|
*/
|
|
static void NVIC_Configuration(void)
|
|
{
|
|
#if defined(VECT_TAB_RAM)
|
|
// Set the Vector Table base location at 0x20000000
|
|
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x00);
|
|
#elif defined(VECT_TAB_FLASH)
|
|
// Set the Vector Table base location at 0x08000000
|
|
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x00);
|
|
#elif defined(VECT_TAB_USER)
|
|
// Set the Vector Table base location by user
|
|
NVIC_SetVectorTable(NVIC_VectTab_FLASH, USER_VECTOR_TABLE);
|
|
#endif
|
|
}
|
|
|
|
/**
|
|
* GPIO Configuration
|
|
*/
|
|
static void GPIO_Configuration(void)
|
|
{
|
|
GPIO_InitTypeDef GPIO_InitStructure;
|
|
|
|
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
|
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
|
|
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
|
GPIO_Init(GPIOA, &GPIO_InitStructure);
|
|
GPIO_Init(GPIOB, &GPIO_InitStructure);
|
|
GPIO_Init(GPIOC, &GPIO_InitStructure);
|
|
GPIO_Init(GPIOD, &GPIO_InitStructure);
|
|
GPIO_Init(GPIOE, &GPIO_InitStructure);
|
|
GPIO_Init(GPIOF, &GPIO_InitStructure);
|
|
GPIO_Init(GPIOG, &GPIO_InitStructure);
|
|
|
|
|
|
|
|
/******************system run led*******************/
|
|
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
|
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
|
|
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
|
GPIO_Init(GPIOB, &GPIO_InitStructure);
|
|
|
|
/* USART1_TX */
|
|
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);
|
|
|
|
/* USART1_RX */
|
|
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
|
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
|
|
GPIO_Init(GPIOA, &GPIO_InitStructure);
|
|
}
|
|
|
|
/*******************************************************************************
|
|
* Function Name : USART1_Configuration
|
|
* Description : USART1 Configuration
|
|
* Input : None
|
|
* Output : None
|
|
* Return : None
|
|
*******************************************************************************/
|
|
void USART1_Configuration(void)
|
|
{
|
|
USART_InitTypeDef USART_InitStructure;
|
|
|
|
USART_InitStructure.USART_BaudRate = 115200;
|
|
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
|
|
USART_InitStructure.USART_StopBits = USART_StopBits_1;
|
|
USART_InitStructure.USART_Parity = USART_Parity_No;
|
|
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
|
|
USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
|
|
USART_Init(USART1, &USART_InitStructure);
|
|
|
|
USART_Cmd(USART1, ENABLE);
|
|
}
|
|
|
|
/**
|
|
* IWDG_Configuration
|
|
*/
|
|
static void IWDG_Configuration(void)
|
|
{
|
|
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
|
|
IWDG_SetPrescaler(IWDG_Prescaler_64);
|
|
IWDG_SetReload(1875);
|
|
IWDG_ReloadCounter();
|
|
IWDG_Enable();
|
|
}
|
|
|
|
/**
|
|
* feed IWDG dog
|
|
*/
|
|
void IWDG_Feed(void)
|
|
{
|
|
IWDG_ReloadCounter();//reload
|
|
}
|
|
|
|
int fputc(int ch, FILE *f)
|
|
{
|
|
USART_SendData(USART1, (uint8_t) ch);
|
|
/* Loop until the end of transmission */
|
|
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
|
|
{}
|
|
return ch;
|
|
}
|
|
|
|
int fgetc(FILE *f)
|
|
{
|
|
|
|
while(!(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == SET))
|
|
{
|
|
}
|
|
|
|
|
|
return (USART_ReceiveData(USART1));
|
|
}
|
|
|
|
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 */
|
|
printf("assert failed at %s:%d \n", file, line);
|
|
while (1) {
|
|
}
|
|
}
|
|
|
|
void delay(uint32_t nCount)
|
|
{
|
|
for(; nCount!= 0;nCount--);
|
|
}
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* LOCAL CONFIGURATION ERRORS
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* BSP_Init()
|
|
*
|
|
* Description : Initialize the Board Support Package (BSP).
|
|
*
|
|
* Argument(s) : none.
|
|
*
|
|
* Return(s) : none.
|
|
*
|
|
* Caller(s) : Application.
|
|
*
|
|
* Note(s) : (1) This function SHOULD be called before any other BSP function is called.
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
void BSP_Init (void)
|
|
{
|
|
RCC_Configuration();
|
|
NVIC_Configuration();
|
|
USART1_Configuration();
|
|
GPIO_Configuration();
|
|
//TODO Now temporary comment this code, the official version will open his
|
|
// IWDG_Configuration();
|
|
}
|
|
|