在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            STM32 RS485 收發(fā)

            作者: 時(shí)間:2016-11-25 來(lái)源:網(wǎng)絡(luò) 收藏
            485通訊與232通訊沒(méi)有什么本質(zhì)區(qū)別,都是利用串口設(shè)備進(jìn)行收發(fā)控制。485發(fā)送與接收需要設(shè)置相應(yīng)的模式,使用485收發(fā)器而不是232芯片。以下是通過(guò)按鍵設(shè)置板載485芯片的發(fā)送或者接收模式。看注釋:

            工程:

            本文引用地址:http://www.biyoush.com/article/201611/321304.htm

            1.main.c

            //RS485程序測(cè)試,RS485接受數(shù)據(jù),通過(guò)串口1向上位機(jī)發(fā)送接收到的數(shù)據(jù)


            #include"stm32f10x.h"
            #include"stm32_eval.h"
            #include"user_usart1.h"
            #include"user_led.h"
            #include"user_key.h"
            #include"user_rs485.h"
            #include"user_beep.h"
            #include

            #define CountOf(a) (sizeof(a)/sizeof(*(a)))//求出a的數(shù)據(jù)個(gè)數(shù),sizeof(a)求出a占用多少地址,sizeof(*(a))求出a中第一個(gè)數(shù)據(jù)的長(zhǎng)度
            #define TxBufferSize (CountOf(TxBuffer)-1) //計(jì)算發(fā)送數(shù)據(jù)的個(gè)數(shù),為什么減一:因?yàn)镽xBuffer[]下標(biāo)0開(kāi)始
            #define RxBufferSize TxBufferSize//計(jì)算接受數(shù)據(jù)的個(gè)數(shù)

            u8 TxBuffer[]="------------wgchnln的RS485發(fā)送數(shù)據(jù)--------------";//發(fā)送機(jī)的發(fā)送數(shù)據(jù)數(shù)組
            u8 RxBuffer[RxBufferSize];//用于存放接受到的數(shù)據(jù)

            vu8 TxCounter=0x00;//記錄當(dāng)前發(fā)送次數(shù)
            vu8 RxCounter=0x00;//記錄當(dāng)前接受次數(shù)

            u8 NUMOfDataToTx=TxBufferSize;//存放發(fā)送數(shù)據(jù)的個(gè)數(shù)
            u8 NUMOfDataToRx=RxBufferSize;//存放接受的數(shù)據(jù)個(gè)數(shù)

            //=================================================================================
            #ifdef __GNUC__

            #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
            #else
            #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
            #endif
            //=================================================================================


            int main(void)
            {
            u8 KeyNumber=0; //存放按鍵號(hào)碼
            u8 RS485ModeStatus=0; //存放RS485傳輸模式
            u8 i;


            User_USART1Config(); //USART1初始化

            User_LedConfig(); //LED初始化
            User_LedSpark(Led0,3); //4LED閃爍3三次
            printf("LED初始化完成啦");

            User_KeyConfig(); //按鍵初始化
            printf("按鍵初始化完成啦");

            User_BeepConfig(); //蜂鳴器初始化
            User_BeepStatus(BeepStatus_TurnOn); //蜂鳴器檢驗(yàn)發(fā)聲
            printf("蜂鳴器初始化完成啦");

            User_RS485CTRPortConfig(); //RS485模式選擇端口初始化
            User_RS485Config(); //RS485初始化
            User_RS485NVICConfig(); //RS485中斷嵌套中斷向量配置
            printf("RS485初始化完成啦");


            while(RS485ModeStatus==RS485Mode_IDL)
            {
            KeyNumber=User_KeyRead(); //讀取按鍵號(hào)碼

            RS485ModeStatus=User_RS485ModeSet(KeyNumber); //根據(jù)按鍵號(hào)碼配置RS485傳輸模式
            }

            while(1)
            {
            if(RS485ModeStatus==RS485Mode_Rx) //如果出于接受模式
            {
            USART_ITConfig(USART2,USART_IT_RXNE,ENABLE); //使能接受中斷

            while(RxCounter < RxBufferSize) //等待接受完成
            {
            ;
            }
            printf("接收到的數(shù)據(jù):%s",RxBuffer);
            RxCounter=0;
            }


            else if(RS485ModeStatus==RS485Mode_Tx) //如果出于發(fā)送模式
            {
            USART_ITConfig(USART2,USART_IT_TXE,ENABLE); //使能發(fā)送中斷

            while(TxCounter
            {
            ;
            }
            printf("數(shù)據(jù)正在發(fā)送:");

            for(i=0;i
            {
            printf("%c",TxBuffer[i]);
            if(i==NUMOfDataToTx)
            {
            printf("");
            }
            }

            TxCounter=0;
            }


            else
            {
            KeyNumber=User_KeyRead(); //讀取按鍵號(hào)碼

            RS485ModeStatus=User_RS485ModeSet(KeyNumber); //根據(jù)按鍵號(hào)碼配置RS485傳輸模式
            }
            }
            }


            //=================================================================================
            PUTCHAR_PROTOTYPE
            {


            USART_SendData(USART1, (uint8_t) ch);


            while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
            {

            }
            return ch;
            }
            //=================================================================================

            2.user_usart1.c

            a//程序功能:USART1發(fā)送驅(qū)動(dòng)

            #include"stm32f10x.h"
            #include"user_usart1.h"
            #include



            void User_USART1Config(void)
            {

            USART_InitTypeDef USART_InitStructure;

            GPIO_InitTypeDef GPIO_InitStructure;


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

            USART_InitStructure.USART_BaudRate=115200; //波特率
            USART_InitStructure.USART_WordLength=USART_WordLength_8b; //8位字長(zhǎng)
            USART_InitStructure.USART_StopBits=USART_StopBits_1; //1位停止位
            USART_InitStructure.USART_Parity=USART_Parity_No; //無(wú)奇偶效驗(yàn)位
            USART_InitStructure.USART_Mode=USART_Mode_Tx|USART_Mode_Rx; //發(fā)送接收模式
            USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None; //無(wú)硬件流控


            RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE); //使能GPIO與復(fù)用功能時(shí)鐘


            GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9; //USART1 TX使用引腳
            GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; //復(fù)用推免式輸出
            GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //50MHZ輸出速度

            GPIO_Init(GPIOA,&GPIO_InitStructure); //發(fā)送端口初始化


            GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10; //USART1 RX使用引腳
            GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING; //浮空輸入
            //GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //輸入一般不需要配置速度

            GPIO_Init(GPIOA,&GPIO_InitStructure); //接收端初始化


            USART_Init(USART1,&USART_InitStructure);


            USART_Cmd(USART1,ENABLE);


            printf("看到此信息就說(shuō)明串口1初始化完成啦");
            }

            2.user_rs485.c

            //程序功能:RS485驅(qū)動(dòng) RS485使用的是串口2

            #include"stm32f10x.h"
            #include"user_rs485.h"
            #include"user_led.h"
            #include


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

            關(guān)鍵詞: STM32RS48

            評(píng)論


            技術(shù)專區(qū)

            關(guān)閉