zoukankan      html  css  js  c++  java
  • stm32cube使用

    1、使用stm32cube生成CAN代码注意事项:

      a、需要手动配置CAN过滤器

    {
    	CAN_FilterConfTypeDef  sFilterConfig;
    	uint32_t filterID = (uint32_t)SysAddr<<23;
    	uint32_t filterMaskID = 0x7F800000;
    		
    	sFilterConfig.FilterNumber = 0;
    	sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;
    	sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;
    	sFilterConfig.FilterIdHigh = (uint16_t)(filterID>>16);
    	sFilterConfig.FilterIdLow = filterID;
    	sFilterConfig.FilterMaskIdHigh = (uint16_t)(filterMaskID>>16);
    	sFilterConfig.FilterMaskIdLow = filterMaskID;
    	sFilterConfig.FilterFIFOAssignment = 0; //收到的报文放在FIFO 0里面
    	sFilterConfig.FilterActivation = ENABLE;
    	sFilterConfig.BankNumber = 14;
    		
    	if (HAL_CAN_ConfigFilter(&hcan, &sFilterConfig) != HAL_OK)
    	{
    		/* Filter configuration Error */
    		Error_Handler();
    	}
    		
    	filterID = 0x7F800000;
    	sFilterConfig.FilterNumber = 1;
    	sFilterConfig.FilterIdHigh = (uint16_t)(filterID>>16);
    	sFilterConfig.FilterIdLow = filterID;
    
    	if (HAL_CAN_ConfigFilter(&hcan, &sFilterConfig) != HAL_OK)
    	{
    		/* Filter configuration Error */
    		Error_Handler();
    	}
    }

      b、需要手动使能CAN FIFO接收中断

    HAL_CAN_Receive_IT(&hcan, CAN_FIFO0);	//使能FIFO0接收中断
    

      c、需要手动初始化数据结构体

    typedef struct
    {
      CanTxMsgTypeDef	TxMsg;
      CanRxMsgTypeDef	RxMsg;
      CanRxMsgTypeDef	Rx1Msg;
    }CAN_RxTxBufTypeDef;
    
    CAN_RxTxBufTypeDef CAN_RxTxBuf;
    
    void Can_DataRxTxInit(CAN_HandleTypeDef* hcan)
    {
    	memset(&CAN_RxTxBuf, 0X00, sizeof(CAN_RxTxBuf));
    	
    	hcan->pTxMsg = (CanTxMsgTypeDef *)&CAN_RxTxBuf.TxMsg;
    	hcan->pRxMsg = (CanRxMsgTypeDef *)&CAN_RxTxBuf.RxMsg;
    	hcan->pRx1Msg = (CanRxMsgTypeDef *)&CAN_RxTxBuf.Rx1Msg;
    }
    

      d、每次接收中断完成后需要手动使能下一次接收中断

    void USB_LP_CAN1_RX0_IRQHandler(void)
    {
           /* USER CODE BEGIN USB_LP_CAN1_RX0_IRQn 0 */
           /* USER CODE END USB_LP_CAN1_RX0_IRQn 0 */
           HAL_CAN_IRQHandler(&hcan);
           HAL_CAN_Receive_IT(&hcan,CAN_FIFO0);
    
           /* USER CODE END USB_LP_CAN1_RX0_IRQn 1 */
    } 
    

      e、数据接收、发送与错误回调函数

    void HAL_CAN_TxCpltCallback(CAN_HandleTypeDef* hcan);
    void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef* hcan);
    void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan);
    

    2、使用STM32WB系列中间件STM32_WPAN(version5.1.0)

    要使能WPAN BLE中间件,需要激活外设RTC、HSEM、RF,否则不能使用WPAN BLE中间件

    其它的配置引用UM1718文档中的说明如下:

    Then, an application type must be selected, it can be one among Transparent mode, Server profile, Router profile or Client profile.

    Finally, the mode and other parameters relevant to this application type must be configured.

                 BLE Server profile selection

                BLE Client profile selection

    3、

  • 相关阅读:
    今天开通我的博客
    在ArcGIS中,利用“行政单元面积权重法”实现人口数据格网化
    ArcGIS 下的水文分析
    常用计数器的verilog实现(binary、gray、onehot、LFSR、环形、扭环形)
    简单组合逻辑电路的verilog实现(包括三态门、38译码器、83优先编码器、8bit奇偶校验器)
    乘法器的verilog实现(并行、移位相加、查找表)
    简单时序逻辑电路的verilog实现,包括D触发器、JK触发器、锁存器、寄存器、
    简单ALU(算术逻辑单元)的verilog实现
    ubuntu下安装virtualbox 错误及解决办法
    C++单例模式对象的控制释放分析
  • 原文地址:https://www.cnblogs.com/yeshenmeng/p/9821075.html
Copyright © 2011-2022 走看看