新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > stm32串口中斷接收發(fā)送實(shí)驗(yàn)

stm32串口中斷接收發(fā)送實(shí)驗(yàn)

作者: 時(shí)間:2016-11-19 來(lái)源:網(wǎng)絡(luò) 收藏
intmain()

本文引用地址:http://m.butianyuan.cn/article/201611/318081.htm

{

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--);

}



關(guān)鍵詞: stm32串口中斷接收發(fā)

評(píng)論


技術(shù)專(zhuān)區(qū)

關(guān)閉