娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年06月12日(星期四)

2019年06月12日 | STM32的USRT通訊實(shí)現(xiàn)

發(fā)布者:luanzgc 來源: eefocus關(guān)鍵字:STM32  USRT通訊  串口  中斷 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

1.實(shí)現(xiàn)平臺(tái)

兩塊STM開發(fā)板,杜邦線;


初始化板子上的串口;

為串口開啟中斷;

根據(jù)需要制定兩個(gè)板子的通訊協(xié)議。

2.實(shí)現(xiàn)過程

2.1協(xié)議制定

在工程實(shí)踐的過程中,常常需要兩個(gè)板子進(jìn)行通訊來實(shí)現(xiàn)功能。現(xiàn)在常常使用的通訊方法常常是CAN通信,TTL通訊,RS485通訊,RS232通訊,I2C,I2S,SPI等。UART也是一種常用的通訊方式,這種通訊方式為全雙工。


制定協(xié)議時(shí)應(yīng)注意以下幾點(diǎn):


起始符,結(jié)束符和校驗(yàn)位 在為制定通訊協(xié)議的時(shí)候,首先應(yīng)該確定發(fā)送數(shù)據(jù)的起始符,結(jié)束符和校驗(yàn)位;在設(shè)置起始符,結(jié)束符的時(shí)候應(yīng)該避免和發(fā)送的內(nèi)容發(fā)生沖突。結(jié)束符最好可以設(shè)置多位,一般可以設(shè)置兩個(gè)位作為結(jié)束符;校驗(yàn)位需要在結(jié)束符之前;起始位一般沒有特殊要求的話,設(shè)置一位即可。


校驗(yàn)方式


一般校驗(yàn)方式可以是奇檢驗(yàn),偶校驗(yàn),CRC校驗(yàn)。現(xiàn)在用的較多的是CRC校驗(yàn),CRC校驗(yàn)可以看引用的第三篇博文,講的比較清楚。


接下來給個(gè)UART通訊例子:


接下來介紹實(shí)現(xiàn)


實(shí)現(xiàn)在STM32ZET6開發(fā)板上,UART4,正點(diǎn)原子


UART4初始化:


  1 void UART4_Init(void)

  2 {

  3 //GPIO端口設(shè)置

  4 GPIO_InitTypeDef GPIO_InitStructure;

  5 USART_InitTypeDef USART_InitStructure;

  6 NVIC_InitTypeDef NVIC_InitStructure;

  7 USART_DeInit(UART4);  //復(fù)位串口4

  8 RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4 ,ENABLE);

  9 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);//使能UART4,GPIOA時(shí)鐘

 10 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; 

 11 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

 12 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//復(fù)用推挽輸出

 13 GPIO_Init(GPIOC, &GPIO_InitStructure); 

 14 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;

 15 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空輸入

 16 GPIO_Init(GPIOC, &GPIO_InitStructure); 

 17 //UART4 NVIC 配置

 18 NVIC_InitStructure.NVIC_IRQChannel = UART4_IRQn;

 19 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//搶占優(yōu)先級(jí)3

 20 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;//子優(yōu)先級(jí)3

 21 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//IRQ通道使能

 22 NVIC_Init(&NVIC_InitStructure); //根據(jù)指定的參數(shù)初始化VIC寄存器

 23 //USART 初始化設(shè)置

 24 USART_InitStructure.USART_BaudRate = 115200;//一般設(shè)置為9600;

 25 USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字長為8位數(shù)據(jù)格式

 26 USART_InitStructure.USART_StopBits = USART_StopBits_1;//一個(gè)停止位

 27 USART_InitStructure.USART_Parity = USART_Parity_No;//無奇偶校驗(yàn)位

 28 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//無硬件數(shù)據(jù)流控制

 29 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收發(fā)模式

 30 USART_Init(UART4, &USART_InitStructure); //初始化串口

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

 32 USART_Cmd(UART4, ENABLE); //使能串口 

 33 return ;

 34 }

UART中斷函數(shù):


 


 

  1 u8 uart_flag=0;

  2 extern u8 usart_signal[10];

  3 u8 UART4_RX_BUF[USART_REC_LEN];     //接收緩沖,最大USART_REC_LEN個(gè)字節(jié).

  4 u16 UART4_RX_STA = 0;       //接收狀態(tài)標(biāo)記

  5 void UART4_IRQHandler(void)                //串口4中斷服務(wù)程序

  6  {

  7 u8 Res;

  8  u8 len = 0,v = 0;

  9  if(USART_GetITStatus(UART4, USART_IT_RXNE) != RESET)  //接收中斷

 10  {

 11  Res = USART_ReceiveData(UART4);//(USART1->DR); //讀取接收到的數(shù)據(jù)

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

 13  {

 14  if(UART4_RX_STA&0x4000)//接收到了0xff

 15  {

 16  if(Res!=0x0a)

 17  {

 18  UART4_RX_STA = 0; //接收錯(cuò)誤,重新開始

 19  }

 20  else 

 21 {

 22  UART4_RX_STA|=0x8000; //接收完成了 

 23  len = UART4_RX_STA &0x3fff;

 24  if(len != 10) // 數(shù)據(jù)長度不是(12-2)

 25  {

 26  UART4_RX_STA = 0; // 重新開始接收

 27  }

 28 else 

 29  {

 30  if(UART_check(UART4_RX_BUF) == 1) // 檢測起始符與終止符

 31  {

 32  for(v = 0;v < 10;v++)

 33  {

 34  usart_signal[v] = UART4_RX_BUF[v];

 35  uart_flag=1;

 36  }

 37  }

 38  else 

 39  {

 40  UART4_RX_STA = 0;

 41  }

 42  }

 43  }

 44  }

 45  else //還沒收到0Xff

 46  {

 47  if(Res==0xff)

 48  {

 49  UART4_RX_STA|=0x4000;

 50 

 51  }

 52  else

 53 {

 54    UART4_RX_BUF[UART4_RX_STA&0X3FFF]=Res ;

 55    UART4_RX_STA++;

 56  if(UART4_RX_STA>(USART_REC_LEN-1))UART4_RX_STA=0;//接收數(shù)據(jù)錯(cuò)誤,重新開始接收   

 57  }  

 58  }

 59    }     

 60  }  

 61  }


關(guān)鍵字:STM32  USRT通訊  串口  中斷 引用地址:STM32的USRT通訊實(shí)現(xiàn)

上一篇:STM32CubeMX關(guān)于燒寫程序的問題記錄
下一篇:USB Device應(yīng)用筆記(基于STM32F103)

推薦閱讀

var videoObject = { container: '.video', variable: 'player', autoplay:true, html5m3u8:true, video:'http://media.elecfans.com/topic/gongkaike/2018/05/393c3780-5f20-11e8-b07b-408d5c8db401/1/hls/index.m3u8' }; if (!!window.ActiveXObject) { videoObject.html5m3u8 = false } var player=new ckplayer(videoObject);
6月12日,以“新極致·新挑戰(zhàn)”為主題的國家電網(wǎng)泛在電力物聯(lián)網(wǎng)綠色萬里行暨第六屆環(huán)青海湖(國際)電動(dòng)汽車挑戰(zhàn)賽發(fā)車儀式在北京舉行。活動(dòng)由國網(wǎng)電動(dòng)汽車公司主辦并全程保駕護(hù)航。6輛國產(chǎn)品牌純電動(dòng)汽車由北京啟程,途經(jīng)5個(gè)城市,歷時(shí)6天抵達(dá)青海湖畔,行程超2000公里,沿途全程使用國家電網(wǎng)建設(shè)的充電設(shè)施,以實(shí)際行動(dòng)踐行綠色發(fā)展、綠色出行理念。國...
董明珠成功連任格力董事長。在近日接受央視采訪時(shí),董明珠表示,當(dāng)時(shí)被選為董事,自信自己的票一定很高。同時(shí),她還透露,接下來要做的一件事就是培養(yǎng)年輕人。董明珠稱,“這六年無論從企業(yè)發(fā)展、經(jīng)營數(shù)據(jù)、企業(yè)利潤,各方面都有成效,甚至說有顛覆性變化。”“有人問你,想怎么干,我想就是拼命。如果圖安逸的話,你選我我也不干。你選我,我就拼了。只要...
近年來,在政策和資金支持下,大陸面板廠商發(fā)展迅速,中游面板廠商如京東方、TCL華星快速趕超海外廠商,成為全球面板龍頭企業(yè)。大陸面板廠商市占率的提升,也帶動(dòng)上游材料國產(chǎn)替代加速推進(jìn)。目前,在面板產(chǎn)業(yè)配套國產(chǎn)化、本地化等政策的推動(dòng)下,液晶材料國產(chǎn)化率正穩(wěn)步提升。不過,在新型OLED顯示技術(shù)領(lǐng)域,默克、杜邦、出光興產(chǎn)、UDC等國外廠商利用技術(shù)及...

史海拾趣

小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 博湖县| 朔州市| 米林县| 阳信县| 景泰县| 邵阳市| 临西县| 绥宁县| 宣恩县| 阿坝县| 城固县| 玉树县| 馆陶县| 丰镇市| 清徐县| 本溪| 庆安县| 福安市| 仙游县| 红安县| 濮阳县| 南昌县| 太湖县| 房产| 临洮县| 宁陕县| 云龙县| 五寨县| 岳普湖县| 鄯善县| 昭通市| 佛山市| 招远市| 丹东市| 奈曼旗| 大荔县| 仪陇县| 修武县| 井陉县| 师宗县| 宁都县|