微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > stm32串口中断接收发送实验

stm32串口中断接收发送实验

时间:11-19 来源:互联网 点击:
intmain()

{

u32i=0;

/*芯片配置初始化----------------------------------------------------------*/

RCC_Configuration();//复位和时钟控制配置

NVIC_Configuration();//嵌套中断向量控制器配置

GPIO_Configuration();//I/O配置

USART_Configuration();//串口配置

/*指示灯初始化------------------------------------------------------------*/

GPIO_SetBits(GPIOA,GPIO_Pin_12);//熄灭LED1

GPIO_SetBits(GPIOA,GPIO_Pin_15);//熄灭LED2

while(1)

{

i++;

if(500000==i)//LED1闪烁,表示正常。

{

GPIO_WriteBit(GPIOA,GPIO_Pin_12,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_12)));

i=0;

}

}

}

/******************************************************************************************

*函数名称:RCC_Configuration

*功能描述:

*参数:

*

*返回值:

*作者:

*创建日期:2013年5月2日

*全局变量

*全局静态变量:

*局部静态变量:

******************************************************************************************/

voidRCC_Configuration(void)

{

/*RCCsystemreset(fordebugpurpose)*/

RCC_DeInit();//RCC系统初始化,设为默认值

/*EnableHSE*/

RCC_HSEConfig(RCC_HSE_ON);//使能外部晶振(8MHz),关闭旁路

/*WaittillHSEisready*/

HSEStartUpStatus=RCC_WaitForHSEStartUp();//等待外部高速时钟稳定

if(HSEStartUpStatus==SUCCESS)//时钟就绪成功

{

/*EnablePrefetchBuffer*/

/*AHB预分频系数不为1时,必须置预取缓冲区处于开启状态

应与闪存存储器的访问时间一起使用

激活和禁止预取模式时应该在禁止快速时钟时进行(关闭AHB的分频器)*/

FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);//

/*HCLK=SYSCLK*/

RCC_HCLKConfig(RCC_SYSCLK_Div1);//SYSCLK不分频,作为AHB时钟(HCLK,闪存、SRAM等外设时钟设置):36M

/*PCLK2=HCLK*/

RCC_PCLK2Config(RCC_HCLK_Div1);//AHBCLK不分频,作为高速APB(APB2)时钟(PCLK2):36M

/*PCLK1=HCLK/2*/

RCC_PCLK1Config(RCC_HCLK_Div1);//AHBCLK二分频,作为低速APB(APB1)时钟(PCLK1):36M

/*ADCCLK=PCLK2/6*/

RCC_ADCCLKConfig(RCC_PCLK2_Div6);//PCLK26分频,作为ADC时钟(ADCCLK):6M

/*Flash2waitstate*/

/*(SYSCLK)频率与闪存访问时间的关系:

0等待周期,当0

1等待周期,当24MHz

2等待周期,当48MHz

*/

FLASH_SetLatency(FLASH_Latency_1);//设置1个等待周期

/*PLLCLK=8MHz/2*9=36MHz*/

RCC_PLLConfig(RCC_PLLSource_HSE_Div2,RCC_PLLMul_9);//外部时钟2分频后,9倍频(PLL),得36MHz

/*EnablePLL*/

RCC_PLLCmd(ENABLE);//使能PLL电路

/*WaittillPLLisready*/

while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET)//等待PLL电路就绪

{

}

/*SelectPLLassystemclocksource*/

RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//选择PLL倍频时钟作为系统时钟(SYSCLK):36MHz

/*WaittillPLLisusedassystemclocksource*/

while(RCC_GetSYSCLKSource()!=0x08)//等待PLL切换成系统时钟源

{

}

/*SelectHSEassystemclocksource*/

//RCC_SYSCLKConfig(RCC_SYSCLKSource_HSE);//选择外部晶振作为系统时钟源(SYSCLK)

/*WaittillHSEisusedassystemclocksource*/

//while(RCC_GetSYSCLKSource()!=0x04)//等待HSE切换成系统时钟源,并作为输出时钟(该时钟可能会有毛刺,仅作调试)

//{

//}

}

/*GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF、AFIO时钟使能*/

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC

|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOF|RCC_APB2Periph_AFIO,ENABLE);

/*USART3Periphclockenable*/

RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);//USART3时钟使能(APB2)

}

/******************************************************************************************

*函数名称:NVIC_Configuraion

*功能描述:

*参数:

*

*返回值:

*作者:

*创建日期:2013年5月2日

*全局变量:

*全局静态变量:

*局部静态变量:

******************************************************************************************/

voidNVIC_Configuration(void)

{

NVIC_InitTypeDefNVIC_InitStructure;

#ifdefVECT_TAB_RAM

/*SettheVectorTablebaselocationat0x20000000*/

NVIC_SetVectorTable(NVIC_VectTab_RAM,0x0);//RAM

#else/*VECT_TAB_FLASH*/

/*SettheVectorTablebaselocationat0x08000000*/

NVIC_SetVectorTable(NVIC_VectTab_FLASH

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top