chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32入門學(xué)習(xí)筆記之485通信實(shí)驗(yàn)

jf_78858299 ? 來源:滑小稽筆記 ? 作者:電子技術(shù)園地 ? 2023-02-16 14:30 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

17.1 485協(xié)議概述

485是屬于OSI模型物理層的電氣標(biāo)準(zhǔn),屬于2線制,半雙工,多點(diǎn)通信標(biāo)準(zhǔn),485總線采用兩根線路的電壓差來傳遞信號(hào),485兩根線路名稱為A和B,當(dāng)線路A與線路B的電壓差為+2 +6V時(shí)表示邏輯電平1,當(dāng)線路A與線路B的電壓差為-2 -6V時(shí)表示邏輯電平0,485與232協(xié)議都屬于串口通信協(xié)議,都是采用轉(zhuǎn)換芯片將USART接口電平轉(zhuǎn)換為485電平或者232電平,485協(xié)議傳輸速率在10米時(shí)候可達(dá)35Mbps,在1200米是可達(dá)到100Kbps,最大支持總線掛載32個(gè)節(jié)點(diǎn),如果采用特制的芯片可以達(dá)到400個(gè)節(jié)點(diǎn)。

485電氣連接中,為了進(jìn)行阻抗匹配,需要在兩根線路中并聯(lián)一個(gè)120Ω的電阻,一般是一個(gè)設(shè)備并聯(lián)一個(gè),所以485協(xié)議只是之前USART協(xié)議的另一種表現(xiàn)形式,通過之前掌握的USART配置,借助485轉(zhuǎn)換芯片就可以完成485通信線路的搭建。

17.2 實(shí)驗(yàn)例程

采用STM32F103ZET6芯片的PA2(USART2_TXD)和PA3(USART2_RXD)和一個(gè)485轉(zhuǎn)換芯片SP485來實(shí)現(xiàn)RS485通信。其中SP485引腳描述如下圖所示。

圖片

序號(hào) 名稱 功能描述
1 RO 接收器輸出端:當(dāng)RE為低電平時(shí),若A-B≧200mV,RO輸出為高電平若A-B≦-200mV,RO輸出為低電平
2 RE 接收器輸出使能控制當(dāng)RE接低電平時(shí),接收器輸出使能,RO輸出有效當(dāng)RE接高電平時(shí),接收器輸出禁能,RO為高阻態(tài)RE接高電平且DE接低電平時(shí),器件進(jìn)入低功耗關(guān)斷模式
3 DR 驅(qū)動(dòng)器輸出使能控制DE接高電平時(shí)驅(qū)動(dòng)器輸出有效,DE為低電平時(shí)輸出為高阻態(tài)RE接高電平且DE接低電平時(shí),器件進(jìn)入低功耗關(guān)斷模式
4 DI DI驅(qū)動(dòng)器輸入DE為高電平時(shí),DI上的低電平使驅(qū)動(dòng)器同相端輸出為低電平,反相端輸出為高電平DI上的高電平將使同相端輸出為高電平,反相端輸出為低
5 GND 電源
6 A 接收器同相輸入和驅(qū)動(dòng)器同相輸出端
7 B 接收器反相輸入和驅(qū)動(dòng)器反相輸出端
8 VCC 電源,推薦3.3V

根據(jù)上面的芯片描述,我們可以得到連接如下所示。

USART2_TXD(即PA2)接RO端

USART2_RXD(即PA3)接DI端

PD7接DR與RE端

(1)創(chuàng)建rs485.h文件,輸入以下代碼。

/*********************************************************************************************************
                  RS485    驅(qū)    動(dòng)    文    件
*********************************************************************************************************/
#ifndef _RS485_H_
#define _RS485_H_


#include "sys.h"
/*********************************************************************************************************
                硬    件    端    口    定    義
*********************************************************************************************************/
#define RS485_EN  PDout( 7 )
/*********************************************************************************************************
                數(shù)    據(jù)    結(jié)    構(gòu)    定    義
*********************************************************************************************************/
typedef struct
{
  u8 Buffer[ 255 ] ;
  u8 Len ;
}Communication_Data;
extern Communication_Data RS485_Data;
/*********************************************************************************************************
                    函    數(shù)    列    表
*********************************************************************************************************/
void RS485_Init( u32 pclk1,u32 bound ) ;                                //RS485初始化
void RS485_Send_Data( u8 *buf, u8 len ) ;                                //發(fā)送n個(gè)字節(jié)
void RS485_Receive_Data( u8 *buf, u8 *len ) ;                              //接收n個(gè)字節(jié)


#endif

(2)創(chuàng)建rs485.c文件,輸入以下代碼。

#include "rs485.h"
#include "delay.h"


Communication_Data RS485_Data;
/***************************************************
Name    :USART2_IRQHandler
Function  :串口2中斷服務(wù)函數(shù)
Paramater  :None
Return    :None
***************************************************/
void USART2_IRQHandler()
{
  //接收到數(shù)據(jù)
  if( USART2->SR&( 1<<5 ) )
  {
    RS485_Data.Buffer[ RS485_Data.Len ] = USART2->DR ;                        //記錄接收到的值
    RS485_Data.Len ++ ;                                        //接收數(shù)據(jù)增加1
  }
}
/***************************************************
Name    :RS485_Send_Data
Function  :接收n個(gè)字節(jié)
Paramater  :
      *buf:接收區(qū)首地址
      len:讀取的字節(jié)數(shù)
Return    :None
***************************************************/
void RS485_Receive_Data( u8 *buf, u8 *len )
{
  u8 i, rxlen=RS485_Data.Len ;
  delay_ms( 10 ) ;                                          //連續(xù)超過10ms沒有接收到一個(gè)數(shù)據(jù),則認(rèn)為接收結(jié)束
  //接收到了數(shù)據(jù),且接收完成了
  if( ( rxlen==RS485_Data.Len )&&( rxlen!=0 ) )
  {
    for( i=0; iSR&0x40 )==0 ) ;//等待發(fā)送結(jié)束
    USART2->DR = buf[ t ] ;
  }   
  while( ( USART2->SR&0x40 )==0 ) ;                                  //等待發(fā)送結(jié)束  
  RS485_Data.Len = 0 ;
  RS485_EN = 0 ;                                            //設(shè)置為接收模式
}
/***************************************************
Name    :RS485_Init
Function  :RS485初始化
Paramater  :
      pclk1:PCLK1時(shí)鐘頻率
      bound:波特率
Return    :None
***************************************************/
void RS485_Init( u32 pclk1, u32 bound )
{
  float temp ;
  u16 mantissa, fraction ;
  temp = ( float )( pclk1*1000000 )/( bound*16 ) ;                          //得到USARTDIV
  mantissa = temp ;                                          //得到整數(shù)部分
  fraction = ( temp-mantissa )*16 ; //得到小數(shù)部分   
    mantissa <<= 4 ;
  mantissa += fraction ;
  RCC->APB2ENR |= 1<<5 ;                                        //使能PD口
   GPIOD->CRL &= 0x0FFFFFFF ;
  GPIOD->CRL |= 0x30000000 ;


  RCC->APB2ENR |= 1<<2 ;                                        //使能PA口
  GPIOA->CRL &= 0xFFFF00FF ;                                      //IO狀態(tài)設(shè)置
  GPIOA->CRL |= 0x00008B00 ;                                      //IO狀態(tài)設(shè)置
  RCC->APB1ENR |= 1<<17 ;                                        //使能串口時(shí)鐘
  RCC->APB1RSTR |= 1<<17 ;                                      //復(fù)位串口2
  RCC->APB1RSTR &= ~( 1<<17 ) ;                                    //停止復(fù)位
  //波特率設(shè)置
   USART2->BRR = mantissa ;                                      //波特率設(shè)置
  USART2->CR1 |= 0x200C ;                                        //1位停止,無校驗(yàn)位
  USART2->CR1 |= 1<<8 ;                                        //PE中斷使能
  USART2->CR1 |= 1<<5 ;                                        //接收緩沖區(qū)非空中斷使能
  NVIC_Init( 3, 3, USART2_IRQn, 2 ) ;                                  //組2
  RS485_EN = 0 ;                                            //默認(rèn)為接收模式
}

(3)創(chuàng)建1.c文件,輸入以下代碼。

#include "sys.h"
#include "delay.h"
#include "usart1.h"
#include "rs485.h"


int main()
{
  u8 len, datatemp[ 10 ] ;
  STM32_Clock_Init( 9 ) ;                                        //STM32時(shí)鐘初始化
  SysTick_Init( 72 ) ;                                        //SysTick初始化
  USART1_Init( 72, 115200 ) ;                                      //初始化串口1波特率115200
  RS485_Init( 36, 9600 ) ;                                      //初始化RS485
  RS485_Send_Data( "RS485 Test", 10 ) ;                                //發(fā)送數(shù)據(jù)
  while( 1 )
  {
    RS485_Receive_Data( datatemp, &len ) ;
    delay_ms( 10 ) ;
  }
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6067

    文章

    44973

    瀏覽量

    649984
  • OSI
    OSI
    +關(guān)注

    關(guān)注

    0

    文章

    85

    瀏覽量

    15646
  • 485總線
    +關(guān)注

    關(guān)注

    1

    文章

    30

    瀏覽量

    16984
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    如何用STM32的串口6去完成RS485通信實(shí)驗(yàn)

    如何用STM32的串口6去完成RS485通信實(shí)驗(yàn)呢?有哪些步驟?
    發(fā)表于 11-16 06:02

    串口通信實(shí)驗(yàn)分享

    實(shí)驗(yàn)四、串口通信實(shí)驗(yàn)? 自律學(xué)習(xí)堅(jiān)強(qiáng) ,拒絕迷茫。作者:行走的皮卡丘時(shí)間:2021/4/4喜歡就去追,這個(gè)紅燈等不到,說不定下一個(gè)紅燈等到了,嘻嘻!?。。。。?!文章目錄實(shí)驗(yàn)四、串口
    發(fā)表于 01-14 09:08

    如何在F103環(huán)境下進(jìn)行UART通信實(shí)驗(yàn)和RS232通信實(shí)驗(yàn)

    stm32串口通信實(shí)驗(yàn)UART通信實(shí)驗(yàn)(通用異步收發(fā)器)UART串口通信原理:UART的通信過程實(shí)驗(yàn)
    發(fā)表于 02-17 07:17

    RS485差分串行通信實(shí)驗(yàn)

    RS485差分串行通信實(shí)驗(yàn) 一. 實(shí)驗(yàn)目的在上一個(gè)RS232 通訊實(shí)
    發(fā)表于 09-22 16:46 ?3663次閱讀
    RS<b class='flag-5'>485</b>差分串行<b class='flag-5'>通信實(shí)驗(yàn)</b>

    ALIENTEK_MINISTM32_實(shí)驗(yàn)19_無線通信實(shí)驗(yàn)

    ALIENTEK MINISTM32 實(shí)驗(yàn)19 無線通信實(shí)驗(yàn),很好的資料,快來下載吧
    發(fā)表于 02-19 11:40 ?12次下載

    CAN通信實(shí)驗(yàn)

    CAN通信實(shí)驗(yàn)
    發(fā)表于 03-30 16:48 ?0次下載

    STM32各模塊學(xué)習(xí)筆記

    STM32個(gè)模塊學(xué)習(xí)筆記 目錄 STM32筆記之一 中斷優(yōu)先級(jí).......................................
    發(fā)表于 11-30 03:32 ?3248次閱讀

    STM32CubMX自學(xué)筆記(七)—CAN通信實(shí)驗(yàn)

    STM32CubMX自學(xué)筆記(七)—CAN通信實(shí)驗(yàn)主要介紹由于項(xiàng)目需求要用到CAN通信協(xié)議,因此學(xué)習(xí)一下CAN
    發(fā)表于 12-04 18:21 ?12次下載
    <b class='flag-5'>STM32</b>CubMX自學(xué)<b class='flag-5'>筆記</b>(七)—CAN<b class='flag-5'>通信實(shí)驗(yàn)</b>

    16 . USART 串口通信實(shí)驗(yàn)

    USART 串口通信實(shí)驗(yàn)我們知道STM32F1 內(nèi)部含有非常多的通信接口,我們就來學(xué)習(xí)下USART 串口通信。要實(shí)現(xiàn)的功能是:
    發(fā)表于 12-20 19:22 ?20次下載
    16 . USART 串口<b class='flag-5'>通信實(shí)驗(yàn)</b>

    STM32 串口通信實(shí)驗(yàn)

    stm32串口通信實(shí)驗(yàn)UART通信實(shí)驗(yàn)(通用異步收發(fā)器)UART串口通信原理:UART的通信過程實(shí)驗(yàn)
    發(fā)表于 12-20 19:26 ?15次下載
    <b class='flag-5'>STM32</b> 串口<b class='flag-5'>通信實(shí)驗(yàn)</b>

    實(shí)驗(yàn)四、串口通信實(shí)驗(yàn)

    實(shí)驗(yàn)四、串口通信實(shí)驗(yàn)? 自律 學(xué)習(xí)
    發(fā)表于 01-14 10:09 ?2次下載
    <b class='flag-5'>實(shí)驗(yàn)</b>四、串口<b class='flag-5'>通信實(shí)驗(yàn)</b>

    STM32入門學(xué)習(xí)筆記CAN通信實(shí)驗(yàn)1

    CAN是Controller Area Network的縮寫,最初是專門用于汽車網(wǎng)絡(luò)的通信協(xié)議,與485協(xié)議相似,CAN也是一種2線制,采用兩根線的電壓差進(jìn)行數(shù)據(jù)傳輸?shù)膮f(xié)議,隨著CAN協(xié)議的高性能
    的頭像 發(fā)表于 02-16 14:37 ?2205次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>入門</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b><b class='flag-5'>之</b>CAN<b class='flag-5'>通信實(shí)驗(yàn)</b>1

    STM32入門學(xué)習(xí)筆記CAN通信實(shí)驗(yàn)2

    CAN是Controller Area Network的縮寫,最初是專門用于汽車網(wǎng)絡(luò)的通信協(xié)議,與485協(xié)議相似,CAN也是一種2線制,采用兩根線的電壓差進(jìn)行數(shù)據(jù)傳輸?shù)膮f(xié)議,隨著CAN協(xié)議的高性能
    的頭像 發(fā)表于 02-16 14:37 ?2110次閱讀

    STM32入門學(xué)習(xí)筆記CAN通信實(shí)驗(yàn)3

    CAN是Controller Area Network的縮寫,最初是專門用于汽車網(wǎng)絡(luò)的通信協(xié)議,與485協(xié)議相似,CAN也是一種2線制,采用兩根線的電壓差進(jìn)行數(shù)據(jù)傳輸?shù)膮f(xié)議,隨著CAN協(xié)議的高性能
    的頭像 發(fā)表于 02-16 14:37 ?1118次閱讀

    STM32入門學(xué)習(xí)筆記CAN通信實(shí)驗(yàn)4

    CAN是Controller Area Network的縮寫,最初是專門用于汽車網(wǎng)絡(luò)的通信協(xié)議,與485協(xié)議相似,CAN也是一種2線制,采用兩根線的電壓差進(jìn)行數(shù)據(jù)傳輸?shù)膮f(xié)議,隨著CAN協(xié)議的高性能
    的頭像 發(fā)表于 02-16 14:37 ?1300次閱讀