STM32之USART串口通信<二>
一、簡單demo
通過232串口,與上位機(jī)進(jìn)行通信。首先保證單片機(jī)232串口與電腦的串口接口相連,當(dāng)然電腦是USB接口,其實(shí)USB接口的實(shí)質(zhì)也是串口。我們實(shí)現(xiàn)上位機(jī)發(fā)送一個(gè)16進(jìn)制的數(shù)據(jù),單片機(jī)接受到數(shù)據(jù)后顯示,并且2倍發(fā)送給上位機(jī)。
1、usart_init();串口初始化
voidusart_init(){GPIO_InitTypeDefGPIO_InitStructure;USART_InitTypeDefUSART_InitStructrue;NVIC_InitTypeDefNVIC_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);//打開GPIOA和USART時(shí)鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//功能復(fù)用IO時(shí)鐘//GPIO初始化配置GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//TXPA9GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//復(fù)用推挽輸出GPIO_Init(GPIOA,&GPIO_InitStructrue);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//RXPA10GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//浮空輸入GPIO_Init(GPIOA,&GPIO_InitStructure);//USART初始化配置USART_InitStructure.USART_BaudRate=9600;//波特率設(shè)置9600USART_InitStructure.USART_WordLength=USART_WordLength_8b;USART_InitStructure.USART_StopBits=USART_StopBits_1;USART_InitStructure.Parity=USART_Parity_No;USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;//串口模式為發(fā)送和接收模式USART_Init(USART1,&USART_InitStructure);USART_Cmd(USART1,ENABLE);USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//打開發(fā)送中斷,緩沖器有數(shù)據(jù)中斷產(chǎn)生USART_ClearFlag(USART1,USART_FLAG_TC);//清理發(fā)送完成標(biāo)志位//NVIC中斷配置NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//優(yōu)先級分組1,有1位搶占式優(yōu)先級,3位從優(yōu)先級NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;//打開USART1的全局中斷NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;//搶占優(yōu)先級為0NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;//響應(yīng)優(yōu)先級為0NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//使能NVIC_Init(&NVIC_InitStructure);}12345678910111213141516171819202122232425262728293031323334
2、USART1_IRQHandler()串口中斷函數(shù)
voidUSART1_IRQHandler(void){staticu8d;USART_ClearFlag(USART1,USART_FLAG_TC);//當(dāng)接收緩沖器非空時(shí),接收數(shù)據(jù)if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET){d=ReceiveData(USART1);d=2*d;USART_Send(USART1,d);//檢測發(fā)送完成標(biāo)志位是否置1while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)!=SET);}}12345678910111213
3、main()主函數(shù)
intmain(){usart_init();//串口1初始化while(1);return0;}123456
這 個(gè)主函數(shù)的效果是,設(shè)置串口波特率為 9600,在串口助手設(shè)置 HEX 發(fā)送和顯
示,發(fā)送 16 進(jìn)制數(shù)后加 1 進(jìn)行顯示。
4、串口調(diào)試助手設(shè)置