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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4698|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

關(guān)于CAN總線控制器MCP2515的程序 MSP430單片機(jī)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:866106 發(fā)表于 2020-12-23 10:39 | 只看該作者 |只看大圖 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
單片機(jī)源程序如下:
  1. //配置波特率代碼:
  2. //MCP2515ByteWrite(CNF1, 3);
  3. //MCP2515ByteWrite(CNF2, 0x80|PHSEG1_3TQ|PRSEG_1TQ);
  4. //MCP2515ByteWrite(CNF3, PHSEG2_3TQ);
  5. //功能:波特率的設(shè)置非常靈活,通過設(shè)置CNF1、CNF2、CNF3寄存器實(shí)現(xiàn)。


  6. //CNF1中的bit5~0為分頻數(shù)BRP,其對晶振頻率FOSC進(jìn)行分配得到TQ(時間份額)。TQ=2*(BRP+1)/FOSC當(dāng)BRP=3,F(xiàn)OSC=8M,則TQ=2*(3+1)/8M=1us


  7. //如為達(dá)到BRT=125kbps,位時間Tbit為波特率的倒數(shù),Tbit=1/BRT=8us,上圖4段加起來總數(shù)應(yīng)等于8(當(dāng)TQ=1us時)。
  8. //同步段固定為1;若PPRSEG取1;S1和PS2占大多數(shù),分別為3。則采樣點(diǎn)位置為(1+1+3)/8=62.5%,采樣點(diǎn)位置應(yīng)確保在60%~90%。


  9. //同步段:該段持續(xù)時間為 1 TQ。
  10. //傳播段:傳播段的長度可編程設(shè)定為 1~8 TQ。
  11. //相位緩沖段1(PS1):PS1 可編程設(shè)定為 1~8 TQ
  12. //相位緩沖段2(PS2): PS2 可編程設(shè)定為 2~8 TQ
  13. //采樣點(diǎn):
  14. //同步跳轉(zhuǎn)寬度 SJW  SJW 可通過編程設(shè)定為 1~4 TQ   一般情況下,SJW 取值 1 T Q 即可滿足要求(SJW =00)。

  15. //CFG1  ((MCP_SJW_Mask & MCP_SJW_1TQ )|(MCP_BRP_Mask & 0x31))
  16. //  SJW同步跳轉(zhuǎn)寬度位(1TQ) SJW=00   BRP波特率預(yù)分頻 0x27 BRP=39
  17. //  TQ=[2*(BRP+1)]/Fsoc=2*(39+1)/8M=10us

  18. //CFG2 (MCP_BTLMODE_EN)|(MCP_SAM_PLE_1X)|(MCP_PHSEG1_Mask & 0x02)|(MCP_PRSEG_Mask & 0x00 )
  19. //CNF2的bit7取1,  bit5~3(PHSEG1)+1為相位緩沖段PS1的TQ數(shù),  bit2~0(PRSEG)+1為傳播段PRSEG的TQ數(shù)。
  20. //相位緩沖段PS2:開啟  SAM=0,在采樣點(diǎn)對總線進(jìn)行一次采樣, PHSEG1=(2+1)TQ=3TQ,  PRSEG=(0+1)TQ=1TQ
  21. //PS2由CNF3及決定   SAM:總線進(jìn)行一次采樣   PS2相位緩沖段:2  傳播段長度:0

  22. //CFG3 (MCP_SOF_ENABLE)|(MCP_WAKFIL_ENABLE)|(MCP_PHSEG2_Mask & 0x00)
  23. //CNF3的bit2~0  (PHSEG2)+1位相位緩沖段PS2的TQ數(shù)。
  24. //SOF :起始幀信號位   WAKFIL:喚醒濾波使能位  PS2相位緩沖段PS2
  25. //PHSEG2=(2+1)TQ=3TQ,  同時當(dāng)CANCTRL.CLKEN=1時設(shè)定CLKOUT引腳為時間輸出使能位


  26. //------------MCP2515 CAN模塊使用的是8M晶振(軟件計算)----------------

  27. // speed 8M

  28. #define MCP_8MHz_1000kbps_CFG1 (0x00)
  29. #define MCP_8MHz_1000kbps_CFG2 (0x80)
  30. #define MCP_8MHz_1000kbps_CFG3 (0x00)

  31. #define MCP_8MHz_500kbps_CFG1 (0x00)
  32. #define MCP_8MHz_500kbps_CFG2 (0x90)
  33. #define MCP_8MHz_500kbps_CFG3 (0x02)

  34. #define MCP_8MHz_250kbps_CFG1 (0x00)
  35. #define MCP_8MHz_250kbps_CFG2 (0xb1)
  36. #define MCP_8MHz_250kbps_CFG3 (0x05)

  37. #define MCP_8MHz_200kbps_CFG1 (0x00)
  38. #define MCP_8MHz_200kbps_CFG2 (0xb4)
  39. #define MCP_8MHz_200kbps_CFG3 (0x06)

  40. #define MCP_8MHz_125kbps_CFG1 (0x01)
  41. #define MCP_8MHz_125kbps_CFG2 (0xb1)
  42. #define MCP_8MHz_125kbps_CFG3 (0x05)

  43. #define MCP_8MHz_100kbps_CFG1 (0x01)
  44. #define MCP_8MHz_100kbps_CFG2 (0xb4)
  45. #define MCP_8MHz_100kbps_CFG3 (0x06)

  46. #define MCP_8MHz_80kbps_CFG1 (0x01)
  47. #define MCP_8MHz_80kbps_CFG2 (0xbf)
  48. #define MCP_8MHz_80kbps_CFG3 (0x07)

  49. #define MCP_8MHz_50kbps_CFG1 (0x03)
  50. #define MCP_8MHz_50kbps_CFG2 (0xb4)
  51. #define MCP_8MHz_50kbps_CFG3 (0x06)

  52. #define MCP_8MHz_40kbps_CFG1 (0x03)
  53. #define MCP_8MHz_40kbps_CFG2 (0xbf)
  54. #define MCP_8MHz_40kbps_CFG3 (0x07)

  55. #define MCP_8MHz_31k25BPS_CFG1 (0x07)
  56. #define MCP_8MHz_31k25BPS_CFG2 (0xa4)
  57. #define MCP_8MHz_31k25BPS_CFG3 (0x04)

  58. #define MCP_8MHz_20kbps_CFG1 (0x07)
  59. #define MCP_8MHz_20kbps_CFG2 (0xbf)
  60. #define MCP_8MHz_20kbps_CFG3 (0x07)

  61. #define MCP_8MHz_10kbps_CFG1 (0x0f)
  62. #define MCP_8MHz_10kbps_CFG2 (0xbf)
  63. #define MCP_8MHz_10kbps_CFG3 (0x07)

  64. #define MCP_8MHz_5kbps_CFG1 (0x1f)
  65. #define MCP_8MHz_5kbps_CFG2 (0xbf)
  66. #define MCP_8MHz_5kbps_CFG3 (0x07)

  67. // speed 16M
  68. #define MCP_16MHz_1000kbps_CFG1 (0x00)
  69. #define MCP_16MHz_1000kbps_CFG2 (0xD0)
  70. #define MCP_16MHz_1000kbps_CFG3 (0x82)

  71. #define MCP_16MHz_666kbps_CFG1 (0x00)
  72. #define MCP_16MHz_666kbps_CFG2 (0xA0)
  73. #define MCP_16MHz_666kbps_CFG3 (0x04)

  74. #define MCP_16MHz_500kbps_CFG1 (0x00)
  75. #define MCP_16MHz_500kbps_CFG2 (0xF0)
  76. #define MCP_16MHz_500kbps_CFG3 (0x86)

  77. #define MCP_16MHz_250kbps_CFG1 (0x41)
  78. #define MCP_16MHz_250kbps_CFG2 (0xF1)
  79. #define MCP_16MHz_250kbps_CFG3 (0x85)

  80. #define MCP_16MHz_200kbps_CFG1 (0x01)
  81. #define MCP_16MHz_200kbps_CFG2 (0xFA)
  82. #define MCP_16MHz_200kbps_CFG3 (0x87)

  83. #define MCP_16MHz_125kbps_CFG1 (0x03)
  84. #define MCP_16MHz_125kbps_CFG2 (0xF0)
  85. #define MCP_16MHz_125kbps_CFG3 (0x86)

  86. #define MCP_16MHz_100kbps_CFG1 (0x03)
  87. #define MCP_16MHz_100kbps_CFG2 (0xFA)
  88. #define MCP_16MHz_100kbps_CFG3 (0x87)

  89. #define MCP_16MHz_95kbps_CFG1 (0x03)
  90. #define MCP_16MHz_95kbps_CFG2 (0xAD)
  91. #define MCP_16MHz_95kbps_CFG3 (0x07)

  92. #define MCP_16MHz_83k3BPS_CFG1 (0x03)
  93. #define MCP_16MHz_83k3BPS_CFG2 (0xBE)
  94. #define MCP_16MHz_83k3BPS_CFG3 (0x07)

  95. #define MCP_16MHz_80kbps_CFG1 (0x03)
  96. #define MCP_16MHz_80kbps_CFG2 (0xFF)
  97. #define MCP_16MHz_80kbps_CFG3 (0x87)

  98. #define MCP_16MHz_50kbps_CFG1 (0x07)
  99. #define MCP_16MHz_50kbps_CFG2 (0xFA)
  100. #define MCP_16MHz_50kbps_CFG3 (0x87)

  101. #define MCP_16MHz_40kbps_CFG1 (0x07)
  102. #define MCP_16MHz_40kbps_CFG2 (0xFF)
  103. #define MCP_16MHz_40kbps_CFG3 (0x87)

  104. #define MCP_16MHz_33kbps_CFG1 (0x09)
  105. #define MCP_16MHz_33kbps_CFG2 (0xBE)
  106. #define MCP_16MHz_33kbps_CFG3 (0x07)

  107. #define MCP_16MHz_31k25BPS_CFG1 (0x0F)
  108. #define MCP_16MHz_31k25BPS_CFG2 (0xF1)
  109. #define MCP_16MHz_31k25BPS_CFG3 (0x85)

  110. #define MCP_16MHz_25kbps_CFG1 (0X0F)
  111. #define MCP_16MHz_25kbps_CFG2 (0XBA)
  112. #define MCP_16MHz_25kbps_CFG3 (0X07)

  113. #define MCP_16MHz_20kbps_CFG1 (0x0F)
  114. #define MCP_16MHz_20kbps_CFG2 (0xFF)
  115. #define MCP_16MHz_20kbps_CFG3 (0x87)

  116. #define MCP_16MHz_10kbps_CFG1 (0x1F)
  117. #define MCP_16MHz_10kbps_CFG2 (0xFF)
  118. #define MCP_16MHz_10kbps_CFG3 (0x87)

  119. #define MCP_16MHz_5kbps_CFG1  (0x3F)
  120. #define MCP_16MHz_5kbps_CFG2  (0xFF)
  121. #define MCP_16MHz_5kbps_CFG3  (0x87)

  122. //20M
  123. #define MCP_20MHz_125kbps_CFG1 (0x04)////CF1    SJW=1TQ    BRP=4
  124. #define MCP_20MHz_125kbps_CFG2 (0xB2)////CF2    PTS=2TQ    PS1=7TQ   在采樣點(diǎn)進(jìn)行一次采樣
  125. #define MCP_20MHz_125kbps_CFG3 (0x05)////CF3    PS2=6TQ


  126. //-----------------------------------------------------------------------------------------------------------------


  127. /*******************************************************************
  128. *                  CAN SPI commands                               *
  129. *******************************************************************/





  130. //--------------------------MCP2515的SPI指令集--------------------------------

  131. #define     MCP_SPI_RESET           0xC0    //MCP2515復(fù)位 將內(nèi)部寄存器復(fù)位為缺省狀態(tài),并將器件設(shè)定為配置模式
  132. #define     MCP_SPI_READ            0x03    //從

  133. //指定地址起始的寄存器讀取數(shù)據(jù)
  134. #define     MCP_SPI_WRITE           0x02    //將數(shù)據(jù)寫入指定地址起始的寄存器。
  135. #define     MCP_SPI_BitMOD          0x05    //位修改 允許用戶將特殊寄存器中的單獨(dú)位置1或置0
  136. //---------------------------------------------------
  137. #define     MCP_SPI_LOAD_TX0        0x40    //裝載 TX0 緩沖器
  138. #define     MCP_SPI_LOAD_TX1        0x42    //裝載 TX1 緩沖器
  139. #define     MCP_SPI_LOAD_TX2        0x44    //裝載 TX2 緩沖器
  140. //---------------------------------------------------
  141. #define     MCP_SPI_RTS             0x80    //TXB  請求發(fā)送功能
  142. #define     MCP_SPI_RTS_TX0         0x81    //TXB0 請求發(fā)送
  143. #define     MCP_SPI_RTS_TX1         0x82    //TXB1 請求發(fā)送
  144. #define     MCP_SPI_RTS_TX2         0x84    //TXB2 請求發(fā)送
  145. #define     MCP_SPI_RTS_ALL         0x87    //TXB0、TXB1、TXB2請求發(fā)送報文
  146. //---------------------------------------------------
  147. #define     MCP_SPI_READ_RX0        0x90    //快速查詢命令 讀 RX0 緩沖器  注:在拉升CS引腳為高電平后,相關(guān)的RX標(biāo)志位(CANINTF.RX0IF)將被清零
  148. #define     MCP_SPI_READ_RX1        0x94    //快速查詢命令 讀 RX1 緩沖器  注:在拉升CS引腳為高電平后,相關(guān)的RX標(biāo)志位(CANINTF.RX1IF)將被清零
  149. //---------------------------------------------------
  150. #define     MCP_SPI_READ_STATUS     0xA0    //快速查詢命令 讀取寄存器狀態(tài),可讀取有關(guān)發(fā)送和接收功能的一些狀態(tài)位。
  151. #define     MCP_SPI_RX_STATUS       0xB0    //快速查詢命令 RX狀態(tài) ,確定匹配的濾波器和接收報文的類型 (標(biāo)準(zhǔn)幀、擴(kuò)展幀和 / 或遠(yuǎn)程幀)。

  152. //-----------------------------------------------------------------------------------------------------------------

  153. typedef struct      //MCP2515發(fā)送接收 地址 結(jié)構(gòu)體
  154. {
  155.      unsigned char CTRL;    //-*-控制寄存器

  156.      unsigned char SIDH;    //- -標(biāo)準(zhǔn)標(biāo)識符 高位

  157.      unsigned char SIDL;    //- -標(biāo)準(zhǔn)標(biāo)識符 低位 【其中bit3=1 報文將發(fā)送擴(kuò)展標(biāo)識符】

  158.      unsigned char EID8;    //- -擴(kuò)展標(biāo)識符 高位

  159.      unsigned char EID0;    //- -擴(kuò)展標(biāo)識符 低位

  160.      unsigned char DLC;     //- -數(shù)據(jù)長度碼

  161.      unsigned char Data[8]; //- -數(shù)據(jù)

  162. }MCP_Addr_Typedef;

  163. //  MCP2515寄存器地址列表

  164. MCP_Addr_Typedef TXB0; //發(fā)送緩沖器0 地址 TXB0
  165. MCP_Addr_Typedef TXB1; //發(fā)送緩沖器1 地址 TXB1
  166. MCP_Addr_Typedef TXB2; //發(fā)送緩沖器2 地址 TXB2

  167. MCP_Addr_Typedef RXB0; //接收緩沖器0 地址 RXB0
  168. MCP_Addr_Typedef RXB1; //接收緩沖器1 地址 RXB1

  169. //--------------------------------------------------------------------------------

  170. typedef struct      //MCP2515 CAN  報文數(shù)據(jù)結(jié)構(gòu)
  171. {
  172.     uint32_t StdId;      //標(biāo)準(zhǔn)幀 ID  參數(shù)值:0~0x7FF       StdId—bit10~bit0 共11位

  173.     uint32_t ExtId;      //拓展幀 ID  參數(shù)值:0~0x1FFFFFFF  ExtId—bit28~bit0 共29位

  174.     char  IDE;      //SIDL.bit.3  【0—標(biāo)準(zhǔn)幀 ; 1—擴(kuò)展幀]】

  175.     char  RTR;      // DLC.bit6   【0—數(shù)據(jù)幀 ; 1—遠(yuǎn)程幀】

  176.     char  DLC;      //數(shù)據(jù)長度  DLC.bit3~0   參數(shù)值:0~8

  177.     char  Data[8];  //數(shù)據(jù)內(nèi)容  參數(shù)值:0~0xFF

  178. }MCP2515_CAN_MSG;


  179. //---------------------------------------------------


  180. MCP2515_CAN_MSG TXBDATA0; //發(fā)送數(shù)據(jù) 0


  181. MCP2515_CAN_MSG RXBDATA0; //接收數(shù)據(jù)0

  182. uint32_t CanIdJS=0;      //記錄接收到ID上網(wǎng)總數(shù)


  183. unsigned char CAN_MCP_Flag=0;  //接收到數(shù)據(jù)標(biāo)志位


  184. char CAN_ERROR;    //CAN總線錯誤代碼
復(fù)制代碼

所有資料51hei提供下載:
mcp2515.zip (87.31 KB, 下載次數(shù): 75)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:973317 發(fā)表于 2022-8-19 20:34 | 只看該作者
厲害哦,不錯哦
回復(fù)

使用道具 舉報

板凳
ID:450820 發(fā)表于 2022-11-8 17:23 | 只看該作者
不錯,正好需要,下載來學(xué)習(xí)下
回復(fù)

使用道具 舉報

地板
ID:1048397 發(fā)表于 2022-11-23 14:16 | 只看該作者
感謝樓主分享!學(xué)習(xí)一下。

前一段時間想硬改一個電源,后來查資料這個電源是CAN協(xié)議通信的,如果是協(xié)議控制,就不用動硬件了。
回復(fù)

使用道具 舉報

5#
ID:586551 發(fā)表于 2022-12-26 08:53 | 只看該作者
樓主,想提問一下,我想更改他的拓展幀id,但是幀id的第一位是優(yōu)先級和pf值,不知道得修改哪個寄存器
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 精品久久久久久久久久久久久久 | 亚洲最大av| 亚洲毛片在线观看 | 久久国产传媒 | 久久久久久亚洲精品 | 久久小视频 | 亚洲永久字幕 | 久久精品一区 | 91色网站| 日韩成人免费 | 中文字幕在线看 | 一级欧美| 98久久| 日日夜夜精品视频 | 国产 日韩 欧美 在线 | 国产精品1区| 国产精品国产三级国产播12软件 | 日韩成人免费视频 | 视频一二三区 | 精品一区在线看 | 欧美在线a | 青草青草久热精品视频在线观看 | 91国自视频 | 欧美性一区二区三区 | 国产精品久久一区二区三区 | 国内自拍偷拍视频 | 日韩二三区 | 国产精品爱久久久久久久 | 一区二区三区四区不卡视频 | 麻豆av网| 欧美久久久网站 | 日日骚av| 欧美日韩国产在线观看 | 国产精品视频免费观看 | 亚洲精品一区二区三区在线观看 | 亚洲精品女人久久久 | 一区中文字幕 | 久久天堂| 黄色片网站国产 | 日韩伦理一区二区三区 | 久久久久久免费免费 |