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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1323|回復: 1
打印 上一主題 下一主題
收起左側

stm32 can

[復制鏈接]
跳轉到指定樓層
樓主
ID:304460 發表于 2018-9-3 14:46 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
void can1_init(void)
{
        GPIO_InitTypeDef  GPIO_InitStructure;
  /* GPIOA */     
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA, ENABLE);   
        
        /* CAN1  時鐘*/
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);
        
        /* Configure CAN pin: RX */     // PA11
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;     //
        GPIO_Init(GPIOA, &GPIO_InitStructure);

        /* Configure CAN pin: TX */   // PA12
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_Init(GPIOA, &GPIO_InitStructure);

        
//   GPIO_InitTypeDef  GPIO_InitStructure;

//         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
//   RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);
//   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
//   
//   GPIO_PinRemapConfig(GPIO_Remap1_CAN1 , ENABLE);                     //端口復用為CAN1   

//   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;                         //PB8:CAN-RX
//   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;                             //輸入上拉
//   GPIO_Init(GPIOB, &GPIO_InitStructure);
//   
//   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;                                         //PB9:CAN-TX
//   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                         //復用模式
//   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//   GPIO_Init(GPIOB, &GPIO_InitStructure);
}

/****************************************************************************
* 名    稱:TestStatus CAN_Interrupt(void)
* 功    能:中斷模式下的CAN收發
* 入口參數:無
* 出口參數:無
* 說    明:
* 調用方法:無
****************************************************************************/
void can1_Interrupt(void)
{
        CAN_InitTypeDef        CAN_InitStructure;
  CAN_FilterInitTypeDef  CAN_FilterInitStructure;  

//  CanTxMsg TxMessage;
        
        /* CAN寄存器初始化 */
  CAN_DeInit(CAN1);
  CAN_StructInit(&CAN_InitStructure);

  /* CAN單元初始化 */
  CAN_InitStructure.CAN_TTCM = ENABLE;                           //MCR-TTCM  時間觸發通信模式使能
  CAN_InitStructure.CAN_ABOM = ENABLE;                           //MCR-ABOM  自動離線管理
  CAN_InitStructure.CAN_AWUM = ENABLE;                           //MCR-AWUM  自動喚醒模式
  CAN_InitStructure.CAN_NART = DISABLE;                           //MCR-NART  禁止報文自動重傳          0-自動重傳   1-報文只傳一次
  CAN_InitStructure.CAN_RFLM = ENABLE;                           //MCR-RFLM  接收FIFO 鎖定模式  0-溢出時新報文會覆蓋原有報文  1-溢出時,新報文丟棄
  CAN_InitStructure.CAN_TXFP = ENABLE;         //MCR-TXFP  發送FIFO優先級     0-優先級取決于報文標示符      1-優先級取決于發送請求的順序
  CAN_InitStructure.CAN_Mode = CAN_Mode_Normal; //CAN_Mode_LoopBack 環回模式   CAN_Mode_Normal

                /*波特率*////9600
//         CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;                   //BTR-SJW 重新同步跳躍寬度 1個時間單元
//   CAN_InitStructure.CAN_BS1 = CAN_BS1_1tq;                   //BTR-TS1 時間段1 占用了2個時間單元
//   CAN_InitStructure.CAN_BS2 = CAN_BS2_2tq;                   //BTR-TS1 時間段2 占用了3個時間單元
//   CAN_InitStructure.CAN_Prescaler = 945;  
  
        ///*波特率*/9.4 k
        CAN_InitStructure.CAN_SJW = CAN_SJW_4tq;                   //BTR-SJW 重新同步跳躍寬度 1個時間單元
  CAN_InitStructure.CAN_BS1 = CAN_BS1_6tq;                   //BTR-TS1 時間段1 占用了2個時間單元
  CAN_InitStructure.CAN_BS2 = CAN_BS2_4tq;                   //BTR-TS1 時間段2 占用了3個時間單元
  CAN_InitStructure.CAN_Prescaler = 358;  
        ///////////               350  < CAN_Prescaler  < 372

//   CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;                   //BTR-SJW 重新同步跳躍寬度 1個時間單元
//   CAN_InitStructure.CAN_BS1 = CAN_BS1_5tq;                   //BTR-TS1 時間段1 占用了2個時間單元
//   CAN_InitStructure.CAN_BS2 = CAN_BS2_2tq;                   //BTR-TS1 時間段2 占用了3個時間單元
//   CAN_InitStructure.CAN_Prescaler = 487;
        
  CAN_Init(CAN1, &CAN_InitStructure);

  /* CAN過濾器初始化 */
  CAN_FilterInitStructure.CAN_FilterNumber=13;                                                           //
  CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;                 //FM1R  過濾器組0的工作模式。
                                                                                                                                          //0: 過濾器組x的2個32位寄存器工作在標識符屏蔽位模式;
                                                                                                                                          //1: 過濾器組x的2個32位寄存器工作在標識符列表模式。
  CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;        //FS1R 過濾器組0(13~0)的位寬。
                                                                                                                                          //0:過濾器位寬為2個16位; 1:過濾器位寬為單個32位。
  
//   /* 使能報文標示符過濾器按照標示符的內容進行比對過濾,擴展ID不是如下的就拋棄掉,是的話,會存入FIFO0。 */
//   CAN_FilterInitStructure.CAN_FilterIdHigh=(((u32)0x1234<<3)&0xFFFF0000)>>16;                                //要過濾的ID高位
//   CAN_FilterInitStructure.CAN_FilterIdLow=(((u32)0x1234<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF;//要過濾的ID低位
//   CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0xffff;
//   CAN_FilterInitStructure.CAN_FilterMaskIdLow=0xffff;
  
  CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;                                       
  CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
  /* 全為0,忽略了報文標識符判別 */
  CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;
  CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;

  CAN_FilterInitStructure.CAN_FilterFIFOAssignment=0;                                //FFAx : 過濾器位寬設置 報文在通過了某過濾器的過濾后,
                                                                                                                                          //將被存放到其關聯的FIFO中。 0:過濾器被關聯到FIFO0; 1:過濾器被關聯到FIFO1。
  CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;                                //FACTx : 過濾器激活 軟件對某位設置1來激活相應的過濾器。只有對FACTx位清0,
                                                                                                                                          //或對CAN_FMR寄存器的FINIT位設置1后,才能修改相應的過濾器寄存器
                                                                                                                                        //x(CAN_FxR[0:1])。 0:過濾器被禁用; 1:過濾器被激活。
  CAN_FilterInit(&CAN_FilterInitStructure);

  /* CAN FIFO0 接收中斷使能 */
  CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE);
        
}

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

使用道具 舉報

沙發
ID:1 發表于 2018-9-3 17:26 | 只看該作者
補全原理圖或者詳細說明一下電路連接即可獲得100+黑幣
回復

使用道具 舉報

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

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91九色网站| 毛片免费视频 | 国产精品1区 | 免费在线观看av | 亚洲成人精品 | 中文字幕精品一区二区三区在线 | 四虎永久免费影院 | 日韩精品免费看 | 亚洲国产欧美日韩 | 中文字幕视频网 | av色站 | 国产成人免费视频 | 精品国产一区二区三区久久 | 91精品国产综合久久久久久丝袜 | 国产探花在线精品一区二区 | 国产视频在线一区二区 | 亚洲成人一级片 | 综合国产| 久久免费视频2 | 欧美自拍一区 | 国产精品欧美一区二区三区不卡 | 国产区精品视频 | a在线v| 亚洲国产精品一区 | 亚洲成人精 | 日韩和的一区二区 | 久久久www成人免费精品张筱雨 | 涩涩视频在线观看 | 亚洲国产aⅴ成人精品无吗 国产精品永久在线观看 | 99综合| 欧美极品在线视频 | 成人精品 | 欧美日韩综合精品 | 成人日批视频 | 欧美日韩国产一区二区 | 亚洲精品欧美 | 日本视频在线 | 91在线网站 | 亚洲激精日韩激精欧美精品 | 日韩欧美专区 | 欧美手机在线 |