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

can.c


#include "can.h"

 

/*************************************************************

函數名:CAN_Mode_Init(u8 tsjw,u8 tbs2,u8 tbs1,u16 brp,u8 mode)

功能:CAN初始化

變量:

//tsjw:重新同步跳躍時間單元.范圍:CAN_SJW_1tq~ CAN_SJW_4tq

//tbs2:時間段2的時間單元.   范圍:CAN_BS2_1tq~CAN_BS2_8tq;

//tbs1:時間段1的時間單元.   范圍:CAN_BS1_1tq ~CAN_BS1_16tq

//brp :波特率分頻器.范圍:1~1024;  tq=(brp)*tpclk1

//波特率=Fpclk1/((tbs1+tbs2+1)*brp);

//mode:CAN_Mode_Normal,普通模式;CAN_Mode_LoopBack,回環模式;

//Fpclk1的時鐘在初始化的時候設置為36M,如果設置CAN_Mode_Init(CAN_SJW_1tq,CAN_BS2_8tq,CAN_BS1_9tq,4,CAN_Mode_LoopBack);

//則波特率為:36M/((8+9+1)*4)=500Kbps

//返回值:0,初始化OK;

//    其他,初始化失敗;

**************************************************************/

void CAN_Mode_Init(u8 tsjw,u8 tbs2,u8 tbs1,u16 brp,u8 mode)

{

    GPIO_InitTypeDef GPIO_InitStructure;

    CAN_InitTypeDef CAN_InitStructure;

    CAN_FilterInitTypeDef CAN_FilterStructure;

#if CAN_RX0_INT_ENABLE 

    NVIC_InitTypeDef        NVIC_InitStructure;

#endif

    //1*開啟CAN時鐘和對應引腳時鐘

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1,ENABLE);

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

    

    //2*引腳初始化配置

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉輸入模式

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_Init(GPIOA,&GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //復用推挽輸出

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_Init(GPIOA,&GPIO_InitStructure);

    

    //3*CAN初始化配置

    CAN_InitStructure.CAN_Prescaler = brp; //分頻系數為brp+1

    CAN_InitStructure.CAN_Mode=mode; //模式設置

    CAN_InitStructure.CAN_BS1=tbs1; //Tbs1范圍

    CAN_InitStructure.CAN_BS2=tbs2; //Tbs2范圍

    CAN_InitStructure.CAN_SJW=tsjw; //重新同步跳躍寬度的

    CAN_InitStructure.CAN_ABOM=DISABLE; //軟件自動離線管理

    CAN_InitStructure.CAN_AWUM=DISABLE; //睡眠模式通過軟件喚醒

    CAN_InitStructure.CAN_NART=ENABLE;  //使用報文自動傳輸

    CAN_InitStructure.CAN_RFLM=DISABLE;  //報文不鎖定,新的覆蓋舊的

    CAN_InitStructure.CAN_TTCM=DISABLE; //非時間觸發通信模式

    CAN_InitStructure.CAN_TXFP=DISABLE;//優先級由報文標識符決定 

    CAN_Init(CAN1,&CAN_InitStructure);

    

    //4*過濾器初始化配置

    CAN_FilterStructure.CAN_FilterNumber =0; //過濾器0

    CAN_FilterStructure.CAN_FilterMode=CAN_FilterMode_IdMask; //掩碼模式,缺點是有誤差,報表模式缺點是可識別ID少

    CAN_FilterStructure.CAN_FilterScale=CAN_FilterScale_32bit; //32位

    CAN_FilterStructure.CAN_FilterIdHigh=0x0000; //32位ID

    CAN_FilterStructure.CAN_FilterIdLow = 0x0000;

    CAN_FilterStructure.CAN_FilterMaskIdHigh=0x0000; //32位掩碼

    CAN_FilterStructure.CAN_FilterMaskIdLow=0x0000;

    CAN_FilterStructure.CAN_FilterFIFOAssignment=CAN_FilterFIFO0;//過濾器0關聯到FIFO0(郵箱0)

    CAN_FilterStructure.CAN_FilterActivation=ENABLE;//激活過濾器0

    CAN_FilterInit(&CAN_FilterStructure);//濾波器初始化

 

    #if CAN_RX0_INT_ENABLE 

    CAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE);              //FIFO0消息掛號中斷允許.            

 

    NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;     // 主優先級為1

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;            // 次優先級為0

    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

    NVIC_Init(&NVIC_InitStructure);

    #endif

}

 

    #if CAN_RX0_INT_ENABLE  //使能RX0中斷

    //中斷服務函數                

    void USB_LP_CAN1_RX0_IRQHandler(void)

    {

        CanRxMsg RxMessage;

        int i=0;

        CAN_Receive(CAN1, 0, &RxMessage);

        for(i=0;i<8;i++)

        printf("rxbuf[%d]:%drn",i,RxMessage.Data[i]);

    }

    #endif

    

 

//can發送一組數據(固定格式:ID為0X12,標準幀,數據幀)   

//len:數據長度(最大為8)                     

//msg:數據指針,最大為8個字節.

//返回值:0,成功;

//       其他,失敗;

u8 CAN_Send_Msg(u8 *msg,u8 len)

{

    u16 i=0;

    u8 mbox;

    

    CanTxMsg TxMessage; 

    TxMessage.StdId=0x12; //標準ID,設置為擴展時自動變0

    TxMessage.ExtId=0x12; //擴展ID

    TxMessage.IDE=0; //決定是標準(1)還是擴展模式(0)

    TxMessage.RTR=0; //表明是數據幀(0)還是遙控幀(1),當是遙控幀時TxMessage.Data為0

    TxMessage.DLC=len; //數據長度(最大為8) 

    for(i=0;i        TxMessage.Data[i] = msg[i];

    

    mbox = CAN_Transmit(CAN1,&TxMessage); //發送數據,返回所使用郵箱的號碼,如果沒有空郵箱返回 CAN_NO_MB

    i=0;

    while((CAN_TransmitStatus(CAN1,mbox)==CAN_TxStatus_Failed)&&(i<0xfff)) i++; //發送完退出,未發送完i自加到0xfff時強制退出

    if(i>=0xfff) return 1; //失敗

    return 0; //成功

}

 

 

//can口接收數據查詢

//buf:數據緩存區;     

//返回值:0,無數據被收到;

//       其他,接收的數據長度;

u8 CAN_Receive_Msg(u8 *buf)

{

    u32 i;

    CanRxMsg RxMessage; //結構體定義

    if(CAN_MessagePending(CAN1,CAN_FIFO0)==0) return 0; //郵箱為空

    CAN_Receive(CAN1,CAN_FIFO0,&RxMessage);

    for(i=0;i        buf[i] = RxMessage.Data[i];

    return RxMessage.DLC;//返回接收的數據長度

}

can.h


#ifndef _can_H

#define _can_H

 

#include "system.h"

 

 

void CAN_Mode_Init(u8 tsjw,u8 tbs2,u8 tbs1,u16 brp,u8 mode);

u8 CAN_Send_Msg(u8 *msg,u8 len);

u8 CAN_Receive_Msg(u8 *buf);

 

#endif

main.c


#include "system.h"

#include "SysTick.h"

#include "led.h"

#include "usart.h"

#include "can.h"

#include "key.h"

int main()

{

    u8 i,j,key;

    u8 mode=0; //默認是正常模式

    u8 res;

    u8 tbuf[8],char_buf[8];

    u8 rbuf[8];

    

    SysTick_Init(72);

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  //中斷優先級分組 分2組

    LED_Init();

    USART1_Init(9600);

    KEY_Init();

    

    CAN_Mode_Init(CAN_SJW_1tq,CAN_BS2_8tq,CAN_BS1_9tq,4,CAN_Mode_Normal);

    

    while(1)

    {   

        key =KEY_Scan(0);

        if(key==KEY_UP) //切換模式

        {

            mode = !mode; //模式切換,正常模式0x00,環回模式0x01

            CAN_Mode_Init(CAN_SJW_1tq,CAN_BS2_8tq,CAN_BS1_9tq,4,mode);

            if(mode==0) 

                printf("Normal Modern");//正常模式

            else

                printf("LoopBack Modern");//環回模式

        }

        else if(key==KEY_DOWN)//發送接收數據

        {

            for(j=0;j<8;j++)

            {

                tbuf[j] = j;

                char_buf[j] = tbuf[j]+0x30;//加0x30變ASC碼

            }

            res = CAN_Send_Msg(tbuf,8); //返回0成功

            if(res)

                printf("Send Failedrn");

            else

                printf("發送數據:%srn",char_buf);

        }

        res = CAN_Receive_Msg(rbuf); //返回0失敗,非0為接收數據長度

        if(res) //res不為0就可進入

        {

            for(j=0;j            {

                char_buf[j] = rbuf[j]+0x30; //加0x30變ASC碼

            }

            printf("接收數據:%srn",char_buf);

        }

        i++;

        if(i%20==0)

        {

            led1=!led1;

        }

        

        delay_ms(10);

            

    }

}

關鍵字:stm32  CAN通信  初始化 引用地址:stm32---CAN通信

上一篇:stm32---SPI與外部FLASH
下一篇:stm32---RS485半雙工通信

推薦閱讀

TDK的PiezoHapt技術是由積層壓電器件與振動板構成的薄型振動模塊。主要采用了振動的觸覺反饋技術及觸覺反饋等。觸覺反饋技術(Haptics)是指通過力度及振動等皮膚感覺反饋傳遞信息的技術。TDK的 PiezoHapt執行器是由積層壓電器件與振動板構成的薄型振動模塊,雖然其通過低電壓驅動,但可應對各類振動形式。與以往用于應對設備振動的偏心馬達或線性執行器(...
Strategy Analytics最新發布的研究報告指出,2018年智能電視的全球銷量達到1.57億臺,占全年電視總銷量的67%。 目前銷售的每五臺智能電視中,超過五分之一的智能電視都在使用三星開發的Tizen平臺,十分之一運行在谷歌管理的安卓電視系統上。2018年Roku TV占全球電視銷售額的4%,但其銷售主戰場仍在北美——去年每四臺智能電視中就有近四分之一的電視...
注意:此文檔會根據學習過程中遇到的ARM匯編指令,持續更新。LDR匯編指令:LDR指令的格式為:LDR{條件} 目的寄存器,<存儲器地址>LDR指令用于從存儲器中將一個32位的字數據傳送到目的寄存器中。該指令通常用于從存儲器中讀取32位的字數據到通用寄存器,然后對數據進行處理。當程序計數器PC作為目的寄存器時,指令從存儲器中讀取的字數據被當作目的地址,...
高效的工程數據管理可以幫助您在設計階段節省時間和成本。全新數字服務極大促進了浩亭產品和解決方案的數據管理。 每個電氣工程項目的背后均涉及眾多單獨的組件,并且因此構成一個完整的數據集合:2D/3D CAD數據、數據表、型號表和證書構成每一份完備文檔的組成部分。浩亭技術集團數字化轉型總監Andreas Wedel說:“與設計本身相比,花在項目研究以及相...

史海拾趣

問答坊 | AI 解惑

WinCE 5.0邊做邊學(3)

經過前兩次的邊做邊學,我們已經創建并可以自由修改自己的平臺了,這次我平來補充一點理論知識,以便加深對CE生成過程的了解。在此之前,需要說明的是CE的目錄結構是很龐大而復雜的,在以后的工作中很多事情會取決于你對目錄結構的了解程度,在此, ...…

查看全部問答∨

文氏橋式震蕩電路討論專題

之前在搞定這5個RC振蕩電路讓你的模擬設計順暢很多 里wangjiafu1985說文氏橋是經典中的經典,同時SOSO也建議對這個經典中的經典開個討論的專貼,因此開了此貼以供大家討論文氏橋震蕩電路。 下面我就拋磚引玉做個簡單介紹。      & ...…

查看全部問答∨

請問大家有沒有用過支持USB通信的單片機?

大家有調試過單片機的USB通信功能嗎?是什么型號的???…

查看全部問答∨

WinCE對IE6支持嗎?

WinCE支持IE6及更高版本嗎?支持的程度如何?…

查看全部問答∨

秒表設計

用89S51單片機外接12MHZ晶振復位電路,4個數碼管,4個按鍵,做一個電子秒表,具體要求如下: (1)用單片機定時器T0中斷方式,實現1秒定時,用動態顯示方式實現秒表計時顯示。 (2)4位;LED右邊2位顯示秒,左邊2位顯示分,實現秒表計時顯示。 ...…

查看全部問答∨

gps 數據轉換

新手入門 vc 讀取gps 數據 得到 當前點的經緯度  我用串口調試助手 讀到的信息是 60 86 7E 98 00 E6 60 98 60 E6 E6 98 E0 86 7E 66 E0 F8 60 F8 E0 86 E0 86 00 18 E0 F8 F8 86 一串一串的16進制數 然而 我用 VC 打印出來 的卻是 ...…

查看全部問答∨

力科公司2010年高速串行數據測試技術巡回研討會勝利召開

力科公司2010年高速串行數據測試技術巡回研討會勝利召開…

查看全部問答∨

STM8S使用觸摸庫的問題

就是離CPU最遠那個鍵變化量比其他按鍵小 不知道大家有沒有碰到這樣的問題? 如何解決呢?只能調整電阻嗎? 謝謝!…

查看全部問答∨

看ST8的文檔太費勁了.下面的如何解

1. LD A, #$10 2. LD A, $10 3. LD A, ($10,SP) 4. LD A,($10,X) 第一個$10,是個立即數10H 第二個$10是內存地址10H 第三個$10是什么? 第四個$10應該是內存地址10H,還是數字10H? 感覺STM的文檔,沒有仔細說明語法.很難理解…

查看全部問答∨

stm32f10x.h中的說明是不是有錯

請看圖片所示: 下載 (27.42 KB) 2010-11-23 00:45 …

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 湖南省| 星子县| 台东市| 徐闻县| 海城市| 马龙县| 莱州市| 靖州| 青铜峡市| 巴东县| 永城市| 娱乐| 郧西县| 中西区| 巫山县| 江孜县| 仪征市| 邛崃市| 定西市| 进贤县| 永善县| 石景山区| 衢州市| 恭城| 商都县| 茌平县| 平武县| 策勒县| 宁晋县| 乌海市| 苏尼特左旗| 定结县| 手机| 斗六市| 介休市| 喀喇沁旗| 莱州市| 伊金霍洛旗| 新密市| 宿州市| 繁昌县|