初级会员

- 积分
- 95
- 金钱
- 95
- 注册时间
- 2017-7-2
- 在线时间
- 38 小时
|

楼主 |
发表于 2023-8-4 14:42:32
|
显示全部楼层
void HAL_FDCAN_MspInit(FDCAN_HandleTypeDef* hfdcan)
{
GPIO_InitTypeDef GPIO_Initure;
RCC_PeriphCLKInitTypeDef FDCAN_PeriphClk;
__HAL_RCC_FDCAN_CLK_ENABLE(); //ê1ÄüFDCAN1ê±Öó
__HAL_RCC_GPIOB_CLK_ENABLE(); //¿aÆôGPIOAê±Öó
//FDCAN1ê±ÖóÔ′ÅäÖÃÎaPLL1Q
FDCAN_PeriphClk.PeriphClockSelection=RCC_PERIPHCLK_FDCAN;
FDCAN_PeriphClk.FdcanClockSelection=RCC_FDCANCLKSOURCE_PLL;
HAL_RCCEx_PeriphCLKConfig(&FDCAN_PeriphClk);
GPIO_Initure.Pin=GPIO_PIN_8|GPIO_PIN_9; //PA11,12
GPIO_Initure.Mode=GPIO_MODE_AF_PP; //íÆíì¸′óÃ
GPIO_Initure.Pull=GPIO_PULLUP; //éÏà-
GPIO_Initure.Speed=GPIO_SPEED_FREQ_MEDIUM; //3¬¸ßËù
GPIO_Initure.Alternate=GPIO_AF9_FDCAN1; //¸′óÃÎaCAN1
HAL_GPIO_Init(GPIOB,&GPIO_Initure); //3õê¼»ˉ
#if FDCAN1_RX0_INT_ENABLE
HAL_NVIC_SetPriority(FDCAN1_IT0_IRQn,1,2);
HAL_NVIC_EnableIRQ(FDCAN1_IT0_IRQn);
#endif
}
u8 FDCAN1_Mode_Init(u16 presc,u8 ntsjw,u16 ntsg1,u8 ntsg2,u32 mode)
{
FDCAN_FilterTypeDef FDCAN1_RXFilter;
//3õê¼»ˉFDCAN1
HAL_FDCAN_DeInit(&FDCAN1_Handler); //ÏèÇå3yòÔÇ°μÄéèÖÃ
FDCAN1_Handler.Instance=FDCAN1;
FDCAN1_Handler.Init.FrameFormat=FDCAN_FRAME_CLASSIC; //′«í3Ä£ê½
FDCAN1_Handler.Init.Mode=mode; //»Ø»·2aêÔ
FDCAN1_Handler.Init.AutoRetransmission=DISABLE; //1رÕ×Ô¶ˉÖØ′«£¡′«í3Ä£ê½ÏÂò»¶¨òa1رÕ£¡£¡£¡
FDCAN1_Handler.Init.TransmitPause=DISABLE; //1رÕ′«êäÔYí£
FDCAN1_Handler.Init.ProtocolException=DISABLE; //1رÕD-òéòì3£′|àí
FDCAN1_Handler.Init.NominalPrescaler=presc; //·ÖÆμÏμêy
FDCAN1_Handler.Init.NominalSyncJumpWidth=ntsjw; //ÖØDÂí¬2½ìøÔ¾¿í¶è
FDCAN1_Handler.Init.NominalTimeSeg1=ntsg1; //tsg1·¶Î§:2~256
FDCAN1_Handler.Init.NominalTimeSeg2=ntsg2; //tsg2·¶Î§:2~128
FDCAN1_Handler.Init.MessageRAMOffset=0; //DÅÏ¢RAMÆ«òÆ
FDCAN1_Handler.Init.StdFiltersNbr=0; //±ê×¼DÅÏ¢IDÂË2¨Æ÷±àoÅ
FDCAN1_Handler.Init.ExtFiltersNbr=0; //à©Õ1DÅÏ¢IDÂË2¨Æ÷±àoÅ
FDCAN1_Handler.Init.RxFifo0ElmtsNbr=1; //½óêÕFIFO0ÔaËرàoÅ
FDCAN1_Handler.Init.RxFifo0ElmtSize=FDCAN_DATA_BYTES_8; //½óêÕFIFO0ÔaËØ′óD¡£o8×Ö½ú
FDCAN1_Handler.Init.RxBuffersNbr=0; //½óêÕ»o3å±àoÅ
FDCAN1_Handler.Init.TxEventsNbr=0; //·¢Ëíê¼t±àoÅ
FDCAN1_Handler.Init.TxBuffersNbr=0; //·¢Ëí»o3å±àoÅ
FDCAN1_Handler.Init.TxFifoQueueElmtsNbr=1; //·¢ËíFIFODòáDÔaËرàoÅ
FDCAN1_Handler.Init.TxFifoQueueMode=FDCAN_TX_FIFO_OPERATION; //·¢ËíFIFODòáDÄ£ê½
FDCAN1_Handler.Init.TxElmtSize=FDCAN_DATA_BYTES_8; //·¢Ëí′óD¡:8×Ö½ú
if(HAL_FDCAN_Init(&FDCAN1_Handler)!=HAL_OK) return 1; //3õê¼»ˉFDCAN
//ÅäÖÃRXÂË2¨Æ÷
FDCAN1_RXFilter.IdType=FDCAN_STANDARD_ID; //±ê×¼ID
FDCAN1_RXFilter.FilterIndex=0; //ÂË2¨Æ÷Ë÷òy
FDCAN1_RXFilter.FilterType=FDCAN_FILTER_MASK; //ÂË2¨Æ÷ààDí
FDCAN1_RXFilter.FilterConfig=FDCAN_FILTER_TO_RXFIFO0; //1yÂËÆ÷01Øáaμ½FIFO0
FDCAN1_RXFilter.FilterID1=0x0000; //32λID
FDCAN1_RXFilter.FilterID2=0x0000; //èç1ûFDCANÅäÖÃÎa′«í3Ä£ê½μÄ»°£¬ÕaàïêÇ32λÑúÂë
if(HAL_FDCAN_ConfigFilter(&FDCAN1_Handler,&FDCAN1_RXFilter)!=HAL_OK) return 2;//ÂË2¨Æ÷3õê¼»ˉ
HAL_FDCAN_Start(&FDCAN1_Handler); //¿aÆôFDCAN
HAL_FDCAN_ActivateNotification(&FDCAN1_Handler,FDCAN_IT_RX_FIFO0_NEW_MESSAGE,0);
return 0;
}
int main(void)
{
sys_cache_enable(); /* ′ò¿aL1-Cache */
HAL_Init(); /* 3õê¼»ˉHAL¿a */
sys_stm32_clock_init(240, 2, 2, 4); /* éèÖÃê±Öó, 480Mhz */
delay_init(480); /* Ñóê±3õê¼»ˉ */
usart_init(115200); /* ′®¿ú3õê¼»ˉÎa115200 */
led_init(); /* 3õê¼»ˉLED */
FDCAN1_Mode_Init(10,8,31,8,FDCAN_MODE_NORMAL);
while (1)
{
FDCAN1_Send_Msg(canbuf,FDCAN_DLC_BYTES_8);
}
} |
|