stm32串口中断接收发送实验
{
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
stm32串口中断接收发 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)