久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標(biāo)題: stm32 RS485實(shí)現(xiàn) [打印本頁]

作者: 15667079525    時(shí)間: 2019-3-22 10:30
標(biāo)題: stm32 RS485實(shí)現(xiàn)
#include "rs485.h"
#include "stm32f10x.h"
#include "misc.h"
#include "stm32f10x_rcc.h"

#if EN_USART2_RX //如果使能了接收

u8 RS485_RX_BUF[64]; //接收緩沖區(qū)
u8 RS485_RX_CNT=0;


//串口1中斷服務(wù)函數(shù)

void USART2_IRQHandler(void)
{
        u8 res;
        if(USART_GetITStatus(USART2,USART_IT_RXNE)!=RESET)
        {
                res=USART_ReceiveData(USART2);//讀取接收到的數(shù)據(jù)
                if(RS485_RX_CNT<64)
                {
                        RS485_RX_BUF[RS485_RX_CNT]=res;
                        RS485_RX_CNT++;
                }
        }
}
#endif

void delay(u32 nTimer)
{   int k,j;
        for (k=0;k<nTimer;k++)
              for (j=0;j<100;j++);
}

//初始化串口
//bound 波特率
void RS485_Init(u32 bound)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //使能GPIOA時(shí)鐘
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);//使能USART2時(shí)鐘
       
       
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;  //PA4為推挽輸出
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOA,&GPIO_InitStructure);
       

        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;  //PA2復(fù)用推挽
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;
        GPIO_Init(GPIOA,&GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//PA3浮空輸入
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;
        GPIO_Init(GPIOA,&GPIO_InitStructure);
       
       
        RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2,ENABLE); //復(fù)位串口2
        RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2,DISABLE);//停止復(fù)位

        USART_InitStructure.USART_BaudRate=bound;  //波特率
        USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//無硬件數(shù)據(jù)流控制
        USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;  //收發(fā)模式
        USART_InitStructure.USART_Parity=USART_Parity_No;  //無奇偶校驗(yàn)
        USART_InitStructure.USART_StopBits=USART_StopBits_1;//一個(gè)停止位
        USART_InitStructure.USART_WordLength=USART_WordLength_8b;//八位數(shù)據(jù)長度
        USART_Init(USART2,&USART_InitStructure);
        USART_Cmd(USART2,ENABLE);  //使能串口
        USART_ClearFlag(USART2, USART_FLAG_TC);//清除標(biāo)志位
       
       
        #ifdef EN_USART2_RX  //如果使能了接收
       

        //USART2 NVIC配置
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  //中斷分組2 16個(gè)優(yōu)先級,高兩位搶占式,低兩位響應(yīng)
        NVIC_InitStructure.NVIC_IRQChannel=USART2_IRQn;  //使能串口2中斷
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;//搶占優(yōu)先級3
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;//子優(yōu)先級3
        NVIC_Init(&NVIC_InitStructure);
       
        USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);  //開啟中斷
       
       
        #endif

    GPIO_ResetBits(GPIOA,GPIO_Pin_4);  //默認(rèn)為接收模式 ,即端口輸出低電平
       

}


//RS485發(fā)送len個(gè)字節(jié),其中buf為發(fā)送首地址,len為發(fā)送字節(jié)數(shù)(不要超過64個(gè))
void RS485_Send_data(u8 *buf,u8 len)
{
        u8 t;
        GPIO_SetBits(GPIOA,GPIO_Pin_4); //設(shè)置為發(fā)送模式
        for(t=0;t<len;t++)
        {
                while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET);
                USART_SendData(USART2,buf[t]);
        }
        while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET);
        RS485_RX_CNT=0;
        GPIO_ResetBits(GPIOA,GPIO_Pin_4);  //設(shè)置為接收模式
       
}

//RS485查詢接受到的數(shù)據(jù),其中buf為接收緩存首地址,len為讀到的數(shù)據(jù)長度
void RS485_Receive_data(u8 *buf,u8 *len)
{
        u8 rxlen=RS485_RX_CNT;
        u8 i=0;
        *len=0;
        delay(5000);  //這里還要改???  //等待10ms,連續(xù)超過10ms沒有接收到一個(gè)數(shù)據(jù),就定義為接收結(jié)束
        if(rxlen==RS485_RX_CNT&&rxlen)
        {
                for(i=0;i<rxlen;i++)
                {
                buf[i]=RS485_RX_BUF[i];
                }
        }
        *len=RS485_RX_CNT;
        RS485_RX_CNT=0;
       

}       


作者: admin    時(shí)間: 2019-3-23 03:29
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
作者: Nymo    時(shí)間: 2020-3-24 14:11
學(xué)習(xí)一下,謝謝




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 亚洲情侣视频 | 欧美亚洲国产日韩 | www.日韩欧美 | 精品免费 | 久久伊人精品 | 久在线| 请别相信他免费喜剧电影在线观看 | 成人在线免费观看 | 九色网址| 国产在线观看一区二区三区 | 欧美一区视频 | 欧美三级电影在线播放 | 一区二区三区av | 欧美成人一区二免费视频软件 | 欧美黑人激情 | 精品视频在线一区 | 大伊人久久 | 亚洲精品欧美精品 | 色香婷婷| 亚洲人人 | 日韩精品在线观看视频 | 激情伊人网 | 精品国产乱码久久久久久久久 | 国产精品一区二区在线 | 欧美福利 | 国产一区二区免费 | 在线一级片 | 精品一区久久 | 欧美久久久久久久 | 欧美最猛黑人xxxx黑人 | 热99精品视频 | 久久国产美女视频 | 欧美日韩国产一区 | 中文字幕亚洲精品 | 亚洲国产成人精品久久 | 欧美日韩在线一区二区三区 | 国产一级特黄视频 | 成人国产精品色哟哟 | 欧美国产视频 | 中文字幕日本一区二区 | 欧美激情久久久久久 |