can总线的接收程序都是放在中断里面的,下面是我的一段接收程序希望对你有启发
void
USB_LP_CAN1_RX0_IRQHandler(void)
//CAN_FIFO0接收中断
{
CAN_RxMessage(CAN_MessageStd);
//接收数据
CAN_FRAME_CACHE_Mark();
//缓存数据
CAN_FIFORelease
如题,我的CAN1和CAN2用的相同方式配置,CAN1接收、发送没问题,CAN2只能发送,进不了接收中断,CAN2接收使用的是FIFO0,请教是什么问题?
void CAN_HardwareInit(u8 canChan,float bps,u8 mode,u8 rxIntType)
{
GPIO_InitTypeDef GPIO_InitStructure;
CAN_InitTypeDef CAN_InitStructure;
CAN_FilterInitTypeDef CAN_FilterInitStructure;
u8 i = 0;
switch (canChan)
{
case CAN1_CHANNEL:
#if CAN1_USE_GPIOA_EN
//使能相关时钟
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//使能PORTA时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);//使能CAN1时钟
//初始化GPIO
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11| GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
可以的。较新的系列已经能够部分地解决之前存在的SRAM冲突问题,当同时使用USB和CAN时,共享1kB的SRAM会分成两块,USB部分使用前768B作为缓冲区,而CAN部分使用后256B作为缓冲区。
本文标签:stm32f042