}
void RCC_Configuration(void)
{
/* SYSCLK, HCLK, PCLK2 and PCLK1 configuration -----------------------------*/
/* RCC system reset(for debug purpose)系统复位 */
RCC_DeInit();
/* Enable HSE */
RCC_HSEConfig(RCC_HSE_ON);
/* Wait till HSE is ready */
HSEStartUpStatus = RCC_WaitForHSEStartUp();
if(HSEStartUpStatus == SUCCESS)
{
/* Enable Prefetch Buffer */
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
/* Flash 2 wait state */
FLASH_SetLatency(FLASH_Latency_2);
/* HCLK = SYSCLK 系统总线时钟*/
RCC_HCLKConfig(RCC_SYSCLK_Div1);
/* PCLK2 = HCLK 高速外围总线时钟*/
RCC_PCLK2Config(RCC_HCLK_Div1);
/* PCLK1 = HCLK/2 低速外围总线时钟*/
RCC_PCLK1Config(RCC_HCLK_Div2);
/* PLLCLK = 8MHz * 9 = 72 MHz 配置PLL时钟源和倍频因子*/
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
/* Enable PLL */
RCC_PLLCmd(ENABLE);
/* Wait till PLL is ready 检查PLL是否就绪*/
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
{
}
/* Select PLL as system clock source 选择PLL时钟作为系统时钟源*/
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
/* Wait till PLL is used as system clock source */
while(RCC_GetSYSCLKSource() != 0x08)
{
}
}
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD |
RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOF |
RCC_APB2Periph_GPIOG | RCC_APB2Periph_AFIO |
RCC_APB2Periph_TIM1 | RCC_APB2Periph_USART1, ENABLE);
/* 打开APB1总线上的USART2时钟 */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //结构体 初始化
/* Configure USART1 Tx (PA.09) as alternate function push-pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //采用的115200波特率,所以10MHz够了,降低功耗
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* Configure USART2 Tx (PA.02) as alternate function push-pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* Configure USART2 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 USART2 Rx (PA.03) as input floating */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* Configure LED1, LED2, LED3, LED4(PF.06,07,08,09) as input floating */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;//GPIO_Pin_All;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //模拟输入 GPIO_Mode_Out_PP GPIO_Mode_AIN
GPIO_Init(GPIOF, &GPIO_InitStructure);
}
void UARTx_Init(USART_TypeDef * USARTx, uint32_t BAUD, uint16_t MODE)
{
USART_InitTypeDef USART_InitStructure;
USART_ClockInitTypeDef USART_ClockInitStructure;
/* 将结构体设置为缺省状态Configure the USARTx Default paramters */
USART_ClockInit(USARTx, &USART_ClockInitStructure);
USART_StructInit(&USART_InitStructure);
/* USARTx mode config */
USART_InitStructure.USART_BaudRate = BAUD;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1; //停止位
USART_InitStructure.USART_Parity = USART_Parity_No; //奇偶校验Even
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //硬件流控制
USART_InitStructure.USART_Mode = MODE;
USART_Init(USARTx, &USART_InitStructure);
/* Configure the USARTx synchronous paramters */
USART_ClockInitStructure.USART_Clock = USART_Clock_Disable;
USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low; //High
USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;
USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;
USART_ClockInit(USARTx, &USART_ClockInitStructure);
//USART_ITConfig(USARTx, USART_IT_TXE, ENABLE); //TXE发送中断,TC传输完成中断,RXNE接收中断,PE奇偶错误中断,可以是多个
/* 使能USART外设 */
USART_Cmd(USARTx, ENABLE);
}
void LedShow_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* Configure LED1,LED2,LED3 and LED4 (PF.06, PF.07, PF.08, and PF.09 )as Out Push_Pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOF, &GPIO_InitStructure);
}
unsigned char Uartx_SendChar(USART_TypeDef* USARTx, unsigned char ch)
{
USART_ClearFlag(USARTx,USART_FLAG_TC);//USART_GetFlagStatus(USARTx,USART_FLAG_TC); //清除发送完成标志位
USART_SendData(USARTx,(unsigned char) ch);
while( USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET ); //等待发送完成。 检测 USART_FLAG_TC 是否置1;
//USART_ClearFlag(USARTx,USART_FLAG_TC);
return ch;
}
void USARTx_SendString(USART_TypeDef* USARTx, unsigned char * str)
{
//USART_ClearFlag(USARTx,USART_FLAG_TC); //清除发送完成标志位 TC,即Transmission Complete
while(*str)
{
USART_SendData(USARTx,*str++);
while(USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET);
}
}