<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      STM32CubeMX版本:

       

      固件庫版本:

      第一步分:CubeMX軟件配置。

      0、工程配置以及芯片選擇這里就不再贅述了,最好是勾選為每個外設生成獨立的.c源文件。

      1、打開CAN外設。

       

       

      2、配置芯片時鐘樹。這里我使用了芯片內部HSI RC。

       

       

      3、CAN配置。

       

       

      3.1配置波特率為1Mb/s。計算方法:42M/2/(14+6+1)==1M

       

       

      3.2、使能RX0接收中斷。

       

       

       

      到這里配置已經完成了,這里我們只配置了部分選項,其余大部分都是采用的默認配置。點擊工具欄中齒輪圖標,生成代碼。

      第二部分:代碼修改。

      1、打開工程,打開can.c文件,在/* USER CODE BEGIN 0 */   和 /* USER CODE END 0 */ 之間添加以下內容。

      #include "main.h"
      #define F407VET6_BOARD_CAN_ID 0x001
      #define SENSOR_BOARD_CAN_ID 0x002
      #define ANOTHER_SENSOR_BOARD_CAN_ID 0x003
      #define THIRD_SENSOR_BOARD_CAN_ID 0x004

      //2個3級深度的FIFO
      #define CAN1FIFO CAN_RX_FIFO0
      #define CAN2FIFO CAN_RX_FIFO1 //
      CAN_TxHeaderTypeDef TxMeg;
      CAN_RxHeaderTypeDef RxMeg;

      void CAN_User_Init(CAN_HandleTypeDef* hcan ) //用戶初始化函數
      {
      CAN_FilterTypeDef sFilterConfig;
      HAL_StatusTypeDef HAL_Status;

      TxMeg.IDE=CAN_ID_STD;//CAN_ID_EXT;
      TxMeg.RTR=CAN_RTR_DATA;

      sFilterConfig.FilterBank = 0; //過濾器0
      sFilterConfig.FilterMode = CAN_FILTERMODE_IDLIST; //設為列表模式
      sFilterConfig.FilterScale = CAN_FILTERSCALE_16BIT;

      sFilterConfig.FilterIdHigh = F407VET6_BOARD_CAN_ID<<5; //基本ID放入到STID中
      sFilterConfig.FilterIdLow = SENSOR_BOARD_CAN_ID <<5;

      sFilterConfig.FilterMaskIdHigh =ANOTHER_SENSOR_BOARD_CAN_ID<<5;
      sFilterConfig.FilterMaskIdLow =THIRD_SENSOR_BOARD_CAN_ID <<5;
      sFilterConfig.FilterFIFOAssignment = CAN1FIFO; //接收到的報文放入到FIFO0中

      sFilterConfig.FilterActivation = ENABLE; //激活過濾器
      sFilterConfig.SlaveStartFilterBank = 0;

      HAL_Status=HAL_CAN_ConfigFilter(hcan, &sFilterConfig);
      HAL_Status=HAL_CAN_Start(&hcan1); //開啟CAN
      if(HAL_Status!=HAL_OK){
      printf("開啟CAN失敗\r\n");
      }
      HAL_Status=HAL_CAN_ActivateNotification(&hcan1, CAN_IT_RX_FIFO0_MSG_PENDING);
      if(HAL_Status!=HAL_OK){
      printf("開啟掛起中段允許失敗\r\n");
      }
      }
      void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan) //接收回調函數
      {
      uint8_t Data[8];
      HAL_StatusTypeDef HAL_RetVal;
      if(hcan ==&hcan1){
      HAL_RetVal=HAL_CAN_GetRxMessage(&hcan1, CAN1FIFO, &RxMeg, Data);
      if ( HAL_OK==HAL_RetVal)
      {
      //在這里接收數據
      }
      }
      //發送數據函數
      uint8_t CANx_SendNormalData(CAN_HandleTypeDef* hcan,uint16_t ID,uint8_t *pData,uint16_t Len)
      {
      HAL_StatusTypeDef HAL_RetVal;
      uint16_t SendTimes,SendCNT=0;
      uint8_t FreeTxNum=0;
      TxMeg.StdId=ID;
      if(!hcan || ! pData ||!Len) return 1;
      SendTimes=Len/8+(Len%8?1:0);
      FreeTxNum=HAL_CAN_GetTxMailboxesFreeLevel(&hcan1);
      TxMeg.DLC=8;
      while(SendTimes--){
      if(0==SendTimes){
      if(Len%8)
      TxMeg.DLC=Len%8;
      }
      while(0==FreeTxNum){
      FreeTxNum=HAL_CAN_GetTxMailboxesFreeLevel(&hcan1);
      }
      HAL_Delay(1); //沒有延時很有可能會發送失敗
      HAL_RetVal=HAL_CAN_AddTxMessage(&hcan1,&TxMeg,pData+SendCNT,(uint32_t*)CAN_TX_MAILBOX0);
      if(HAL_RetVal!=HAL_OK)
      {
      return 2;
      }
      SendCNT+=8;
      }

      return 0;
      }
      2、在main.c中添加can.h頭文件,然后在  /* USER CODE BEGIN 2 */  和 /* USER CODE END 2 */ 之間調用用戶初始化CAN函數。

      CAN_User_Init( &hcan1 );

      OK,CAN收發的基本就可以了。

       

       
      ---------------------
      作者:Endless-Code
      來源:CSDN
      原文:https://blog.csdn.net/u012308586/article/details/81001102
      版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

      posted on 2019-05-24 10:16  李小牛。  閱讀(5743)  評論(0)    收藏  舉報

      主站蜘蛛池模板: 亚洲综合在线亚洲优优色| 国产日韩精品一区在线不卡| 少妇爽到呻吟的视频| 99中文字幕精品国产| 人人澡人人透人人爽| 国产在线乱子伦一区二区| 青青青久热国产精品视频| 亚洲国产精品嫩草影院久久 | 国产成人亚洲综合图区| 日韩日韩日韩日韩日韩| 国产亚洲无线码一区二区| 麻豆久久天天躁夜夜狠狠躁| 1769国内精品视频在线播放| 亚洲av无码之国产精品网址蜜芽| 亚洲精品一区二区三区蜜臀| 国产不卡在线一区二区| 国产欧美性成人精品午夜| 久热这里只有精品视频六| 国产熟女激情一区二区三区| 久久一本人碰碰人碰| 国产欧美日韩亚洲一区二区三区| 国产永久免费高清在线观看| 97精品亚成在人线免视频| 可以直接看的无码av| 人妻中文字幕一区二区三| 国产一区二区三区av在线无码观看| 亚洲色偷偷色噜噜狠狠99| 欧美乱大交aaaa片if| 国产麻豆精品一区一区三区| 欧美精品国产综合久久| 亚洲精品日韩在线观看| 一个色综合亚洲热色综合| 国产亚洲天堂另类综合| 日本欧美大码a在线观看| 亚洲av伦理一区二区| 性欧美videofree高清精品| 精品人妻一区二区三区蜜臀| 91精品国产色综合久久不| 日韩深夜福利视频在线观看| 成人午夜免费无码视频在线观看| 深夜福利国产精品中文字幕|