日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]一、實(shí)驗(yàn)?zāi)康腟TM32 通過串口和上位機(jī)的對(duì)話,STM32 在收到上位機(jī)發(fā)過來的字符串后,原原本本的返回給上位機(jī)。二、STM32串口簡(jiǎn)介STM32F103ZET6 最多可提供 5 路串口,有分?jǐn)?shù)波特率發(fā)生器、支持同步單線通信和半雙工單

一、實(shí)驗(yàn)?zāi)康?/p>


STM32 通過串口和上位機(jī)的對(duì)話,STM32 在收到上位機(jī)發(fā)過來的字符串后,原原本本的返回給上位機(jī)。


二、STM32串口簡(jiǎn)介


STM32F103ZET6 最多可提供 5 路串口,有分?jǐn)?shù)波特率發(fā)生器、支持同步單線通信和半雙工單線通訊、支持 LIN、 支持調(diào)制解調(diào)器操作、 智能卡協(xié)議和 IrDA SIR

ENDEC規(guī)范、具有 DMA等。


我們這里使用的是USART1。

串口設(shè)置的步驟:

1) 串口時(shí)鐘使能, GPIO 時(shí)鐘使能
2) 串口復(fù)位
3) GPIO 端口模式設(shè)置
4) 串口參數(shù)初始化
5) 開啟中斷并且初始化 NVIC(如果需要開啟中斷才需要這個(gè)步驟)
6) 使能串口
7) 編寫中斷處理函數(shù)

三、硬件設(shè)計(jì)


LED燈、串口1。



四、軟件設(shè)計(jì)

usart.c文件

對(duì)串口和IO進(jìn)行設(shè)置!


voiduart_init(u32bound)


{

GPIO_InitTypeDefGPIO_InitStructure;

USART_InitTypeDefUSART_InitStructure;

NVIC_InitTypeDefNVIC_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA,ENABLE);//使能時(shí)鐘

USART_DeInit(USART1);//串口復(fù)位

//USART1_TXPA.9IO口設(shè)置

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;

GPIO_Init(GPIOA,&GPIO_InitStructure);

//USART1_RXPA.10

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOA,&GPIO_InitStructure);

//Usart1NVIC初始化

NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;

NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;

NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;

NVIC_Init(&NVIC_InitStructure);

//USART參數(shù)初始化

USART_InitStructure.USART_BaudRate=bound;;

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;

USART_Init(USART1,&USART_InitStructure);

USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//開啟中斷

USART_Cmd(USART1,ENABLE);//串口使能

}


在串口的接收方面,原子哥設(shè)計(jì)了一個(gè)接受協(xié)議,學(xué)習(xí)啦!就是自己定義一個(gè)全局變量,將這個(gè)變量看作是一個(gè)寄存器,是16位的,最高位當(dāng)作接收完成的標(biāo)識(shí)位,第14位當(dāng)作接收到0x0D標(biāo)識(shí)(回車的表示由兩個(gè)字節(jié)組成0x0D 和 0x0A,當(dāng)接收到這個(gè)兩個(gè)字節(jié)時(shí)表示接收完成);第13位-第0位,表示接受到的數(shù)據(jù)數(shù)目。


具體的程序是:


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

{

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

{

if(Res!=0x0a)USART_RX_STA=0;//接收錯(cuò)誤,重新開始

elseUSART_RX_STA|=0x8000;//接收完成了

}

else//還沒收到0X0D

{

if(Res==0x0d)USART_RX_STA|=0x4000;

else

{

USART_RX_BUF[USART_RX_STA&0X3FFF]=Res;

USART_RX_STA++;

if(USART_RX_STA>(USART_REC_LEN-1))

USART_RX_STA=0;//接收數(shù)據(jù)錯(cuò)誤,重新開始接收

}

}

}



五、實(shí)驗(yàn)結(jié)果

成功!


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉