stm32串口中斷接收發(fā)送實驗
{
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;
}
}
}
/******************************************************************************************
*函數(shù)名稱:RCC_Configuration
*功能描述:
*參數(shù):
*
*返回值:
*作者:
*創(chuàng)建日期:2013年5月2日
*全局變量:
*全局靜態(tài)變量:
*局部靜態(tài)變量:
******************************************************************************************/
voidRCC_Configuration(void)
{
/*RCCsystemreset(fordebugpurpose)*/
RCC_DeInit();//RCC系統(tǒng)初始化,設為默認值
/*EnableHSE*/
RCC_HSEConfig(RCC_HSE_ON);//使能外部晶振(8MHz),關閉旁路
/*WaittillHSEisready*/
HSEStartUpStatus=RCC_WaitForHSEStartUp();//等待外部高速時鐘穩(wěn)定
if(HSEStartUpStatus==SUCCESS)//時鐘就緒成功
{
/*EnablePrefetchBuffer*/
/*AHB預分頻系數(shù)不為1時,必須置預取緩沖區(qū)處于開啟狀態(tài)
應與閃存存儲器的訪問時間一起使用
激活和禁止預取模式時應該在禁止快速時鐘時進行(關閉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倍頻時鐘作為系統(tǒng)時鐘(SYSCLK):36MHz /*WaittillPLLisusedassystemclocksource*/ while(RCC_GetSYSCLKSource()!=0x08)//等待PLL切換成系統(tǒng)時鐘源 { } /*SelectHSEassystemclocksource*/ //RCC_SYSCLKConfig(RCC_SYSCLKSource_HSE);//選擇外部晶振作為系統(tǒng)時鐘源(SYSCLK) /*WaittillHSEisusedassystemclocksource*/ //while(RCC_GetSYSCLKSource()!=0x04)//等待HSE切換成系統(tǒng)時鐘源,并作為輸出時鐘(該時鐘可能會有毛刺,僅作調(diào)試) //{ //} } /*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) } /****************************************************************************************** *函數(shù)名稱:NVIC_Configuraion *功能描述: *參數(shù): * *返回值: *作者: *創(chuàng)建日期:2013年5月2日 *全局變量: *全局靜態(tài)變量: *局部靜態(tài)變量: ******************************************************************************************/ 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,0x0);//FLASH #endif NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//選擇第2組為優(yōu)先級分組方式:高2位指定搶占優(yōu)先級,低2位指定響應優(yōu)先級 /*enablinginterrupt*/ NVIC_InitStructure.NVIC_IRQChannel=USART3_IRQChannel;//USART中斷 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;//占先級為0級,最高 NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;//響應級最高0 NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//啟動中斷 NVIC_Init(&NVIC_InitStructure);//初始化嵌套向量中斷控制器 } /****************************************************************************************** *函數(shù)名稱:GPIO_Configuration *功能描述: *參數(shù): * *返回值: *作者: *創(chuàng)建日期:2013年5月2日 *全局變量: *全局靜態(tài)變量: *局部靜態(tài)變量: ******************************************************************************************/ voidGPIO_Configuration(void) { GPIO_InitTypeDefGPIO_InitStructure; GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//關掉JTAG,釋放PA15,PB3,PB4 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12|GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽輸出 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIO_InitStructure); /*ConfigureUSART3Tx(PB.10)asalternatefunctionpush-pull*/ GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOB,&GPIO_InitStructure); /*ConfigureUSART3Rx(PB.11)asinputfloating*/ GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOB,&GPIO_InitStructure);//RX初始化 } /****************************************************************************************** *函數(shù)名稱:GPIO_Configuration *功能描述: *參數(shù): * *返回值: *作者: *創(chuàng)建日期:2013年5月2日 *全局變量: *全局靜態(tài)變量: *局部靜態(tài)變量: ******************************************************************************************/ voidUSART_Configuration(void) { USART_InitTypeDefUSART_InitStructure; USART_InitStructure.USART_BaudRate=9600;//波特率9600 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_Rx|USART_Mode_Tx;//串口發(fā)送和接收模式 /*ConfigureUSART3basicandasynchronousparamters*/ USART_Init(USART3,&USART_InitStructure);//串口初始化 /*EnableUSART3*/ USART_Cmd(USART3,ENABLE);//指令打開 /*EnablesCOMtransmitinterrupt*/ USART_ITConfig(USART3,USART_IT_TC,ENABLE);//發(fā)送中斷打開 /*EnablesCOMreceiveinterrupt*/ USART_ITConfig(USART3,USART_IT_RXNE,ENABLE);//接收中斷打開 } voidDelay(vu32nCount) { for(;nCount!=0;nCount--); }
評論