stm32串口中斷接收發(fā)送實(shí)驗(yàn)
{
u32i=0;
/*芯片配置初始化----------------------------------------------------------*/
RCC_Configuration();//復(fù)位和時(shí)鐘控制配置
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ù)名稱(chēng):RCC_Configuration
*功能描述:
*參數(shù):
*
*返回值:
*作者:
*創(chuàng)建日期:2013年5月2日
*全局變量:
*全局靜態(tài)變量:
*局部靜態(tài)變量:
******************************************************************************************/
voidRCC_Configuration(void)
{
/*RCCsystemreset(fordebugpurpose)*/
RCC_DeInit();//RCC系統(tǒng)初始化,設(shè)為默認(rèn)值
/*EnableHSE*/
RCC_HSEConfig(RCC_HSE_ON);//使能外部晶振(8MHz),關(guān)閉旁路
/*WaittillHSEisready*/
HSEStartUpStatus=RCC_WaitForHSEStartUp();//等待外部高速時(shí)鐘穩(wěn)定
if(HSEStartUpStatus==SUCCESS)//時(shí)鐘就緒成功
{
/*EnablePrefetchBuffer*/
/*AHB預(yù)分頻系數(shù)不為1時(shí),必須置預(yù)取緩沖區(qū)處于開(kāi)啟狀態(tài)
應(yīng)與閃存存儲(chǔ)器的訪問(wèn)時(shí)間一起使用
激活和禁止預(yù)取模式時(shí)應(yīng)該在禁止快速時(shí)鐘時(shí)進(jìn)行(關(guān)閉AHB的分頻器)*/
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);//
/*HCLK=SYSCLK*/
RCC_HCLKConfig(RCC_SYSCLK_Div1);//SYSCLK不分頻,作為AHB時(shí)鐘(HCLK,閃存、SRAM等外設(shè)時(shí)鐘設(shè)置):36M
/*PCLK2=HCLK*/
RCC_PCLK2Config(RCC_HCLK_Div1);//AHBCLK不分頻,作為高速APB(APB2)時(shí)鐘(PCLK2):36M
/*PCLK1=HCLK/2*/
RCC_PCLK1Config(RCC_HCLK_Div1);//AHBCLK二分頻,作為低速APB(APB1)時(shí)鐘(PCLK1):36M
/*ADCCLK=PCLK2/6*/
RCC_ADCCLKConfig(RCC_PCLK2_Div6);//PCLK26分頻,作為ADC時(shí)鐘(ADCCLK):6M
/*Flash2waitstate*/
/*(SYSCLK)頻率與閃存訪問(wèn)時(shí)間的關(guān)系:
0等待周期,當(dāng)0 1等待周期,當(dāng)24MHz 2等待周期,當(dāng)48MHz */ FLASH_SetLatency(FLASH_Latency_1);//設(shè)置1個(gè)等待周期 /*PLLCLK=8MHz/2*9=36MHz*/ RCC_PLLConfig(RCC_PLLSource_HSE_Div2,RCC_PLLMul_9);//外部時(shí)鐘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倍頻時(shí)鐘作為系統(tǒng)時(shí)鐘(SYSCLK):36MHz /*WaittillPLLisusedassystemclocksource*/ while(RCC_GetSYSCLKSource()!=0x08)//等待PLL切換成系統(tǒng)時(shí)鐘源 { } /*SelectHSEassystemclocksource*/ //RCC_SYSCLKConfig(RCC_SYSCLKSource_HSE);//選擇外部晶振作為系統(tǒng)時(shí)鐘源(SYSCLK) /*WaittillHSEisusedassystemclocksource*/ //while(RCC_GetSYSCLKSource()!=0x04)//等待HSE切換成系統(tǒng)時(shí)鐘源,并作為輸出時(shí)鐘(該時(shí)鐘可能會(huì)有毛刺,僅作調(diào)試) //{ //} } /*GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF、AFIO時(shí)鐘使能*/ 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時(shí)鐘使能(APB2) } /****************************************************************************************** *函數(shù)名稱(chēng):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)先級(jí)分組方式:高2位指定搶占優(yōu)先級(jí),低2位指定響應(yīng)優(yōu)先級(jí) /*enablinginterrupt*/ NVIC_InitStructure.NVIC_IRQChannel=USART3_IRQChannel;//USART中斷 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;//占先級(jí)為0級(jí),最高 NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;//響應(yīng)級(jí)最高0 NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//啟動(dòng)中斷 NVIC_Init(&NVIC_InitStructure);//初始化嵌套向量中斷控制器 } /****************************************************************************************** *函數(shù)名稱(chēng):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);//關(guān)掉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ù)名稱(chēng):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;//字符長(zhǎng)度 USART_InitStructure.USART_StopBits=USART_StopBits_1;//停止位 USART_InitStructure.USART_Parity=USART_Parity_No;// USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//硬件流量控制無(wú) USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;//串口發(fā)送和接收模式 /*ConfigureUSART3basicandasynchronousparamters*/ USART_Init(USART3,&USART_InitStructure);//串口初始化 /*EnableUSART3*/ USART_Cmd(USART3,ENABLE);//指令打開(kāi) /*EnablesCOMtransmitinterrupt*/ USART_ITConfig(USART3,USART_IT_TC,ENABLE);//發(fā)送中斷打開(kāi) /*EnablesCOMreceiveinterrupt*/ USART_ITConfig(USART3,USART_IT_RXNE,ENABLE);//接收中斷打開(kāi) } voidDelay(vu32nCount) { for(;nCount!=0;nCount--); }
評(píng)論