<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > STM32之串口通信

STM32之串口通信

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

本文引用地址:http://dyxdggzs.com/article/201611/320972.htm

void USART1_IRQHandler(void)

{

u8 res;

if(USART1->SR&(1<<5))//接收到數據

{

res=USART1->DR;

if((USART_RX_STA&0x80)==0)//接收未完成

{

if(USART_RX_STA&0x40)//接收到了0x0d

{

if(res!=0x0a)

USART_RX_STA=0;//接收錯誤,重新開(kāi)始

else

USART_RX_STA|=0x80; //接收完成了

}else //還沒(méi)收到0X0D

{

if(res==0x0d)

USART_RX_STA|=0x40;

else

{

USART_RX_BUF[USART_RX_STA&0X3F]=res;

USART_RX_STA++;

if(USART_RX_STA>63)USART_RX_STA=0;//接收數據錯誤,重新開(kāi)始接收

}

}

}

}

}

#endif

//該函數的重點(diǎn)就是判斷接收是否完成,通過(guò)檢測是否收到0X0D、0X0A 的連續2 個(gè)字節//(0X0D 后跟0X0A 表示回車(chē)鍵)來(lái)檢測是否結束。當檢測到這個(gè)結束序列之后,就會(huì )置//位USART_RX_STA 的最高為來(lái)標記已經(jīng)收到了一次數據。之后等待外部函數清空該位//之后才開(kāi)始第二次接收。所接收的數據全部存放在USART_RX_BUF 里面,一次接收數//據不能超過(guò)64個(gè)字節,否則被丟棄。

//初始化IO 串口1

//pclk2:PCLK2時(shí)鐘頻率(Mhz)

//bound:波特率

//CHECK OK

//091209

void uart_init(u32 pclk2,u32 bound)

{

float temp;

u16 mantissa;

u16 fraction;

temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIV

mantissa=temp; //得到整數部分

fraction=(temp-mantissa)*16; //得到小數部分

mantissa<<=4;

mantissa+=fraction;

RCC->APB2ENR|=1<<2; //使能PORTA口時(shí)鐘

RCC->APB2ENR|=1<<14; //使能串口時(shí)鐘

GPIOA->CRH&=0XFFFFF00F;

GPIOA->CRH|=0X000008B0;//IO狀態(tài)設置

RCC->APB2RSTR|=1<<14; //復位串口1

RCC->APB2RSTR&=~(1<<14);//停止復位

//波特率設置

USART1->BRR=mantissa; // 波特率設置

USART1->CR1|=0X200C; //1位停止,無(wú)校驗位.

#ifdef EN_USART1_RX //如果使能了接收

//使能接收中斷

USART1->CR1|=1<<8; //PE中斷使能

USART1->CR1|=1<<5; //接收緩沖區非空中斷使能

MY_NVIC_Init(3,3,USART1_IRQChannel,2);//組2,最低優(yōu)先級

#endif

}

主函數

#include

#include"common.h"

int main(void)

{

u8 t;

u8 len;

u16 times=0;

Stm32_Clock_Init(9); //系統時(shí)鐘設置

delay_init(72); //延時(shí)初始化

uart_init(72,9600); //串口初始化為9600

while(1)

{

if(USART_RX_STA&0x80)

{

len=USART_RX_STA&0x3f;//得到此次接收到的數據長(cháng)度

printf("n您發(fā)送的消息為:n");

for(t=0;t

{

USART1->DR=USART_RX_BUF[t];

while((USART1->SR&0X40)==0);//等待發(fā)送結束

}

printf("nn");//插入換行

USART_RX_STA=0;

}else

{

times++;

if(timesP00==0)

{

printf("n 簡(jiǎn)單的串口實(shí)驗n");

}

if(times 0==0)printf("請輸入數據,以回車(chē)鍵結束n");

delay_ms(10);

}

}

}

實(shí)驗現象:




上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: STM32串口通

評論


相關(guān)推薦

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

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>