找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 999|回复: 3
收起左侧

STM32F103CBT6单片机与CAN通信,无法接收

[复制链接]
ID:1078313 发表于 2023-7-10 13:36 | 显示全部楼层 |阅读模式
用的cbt6调试can,可以帮我看一下驱动程序有什么问题吗?125MHZ的双机通信

单片机源程序如下:
  1. #include "stm32f10x.h"
  2. #include "./led/bsp_led.h"   
  3. #include "./can/bsp_can.h"

  4. __IO uint32_t flag = 0;      
  5. CanTxMsg TxMessage;                             
  6. CanRxMsg RxMessage;                                 

  7. static void can_delay(__IO u32 nCount)
  8. {
  9.         for(; nCount != 0; nCount--);
  10. }

  11. int main(void)
  12. {        
  13.         LED_GPIO_Config();
  14.         CAN_Config();

  15.   while(1)
  16.         {               
  17.                         uint8_t m;
  18.    
  19.             LED1_ON;
  20.                   LED3_ON;
  21.                         CAN_SetMsg(&TxMessage);
  22. m=CAN_Transmit(CANx, &TxMessage);
  23.          if(CAN_TransmitStatus(CANx,m)==CAN_TxStatus_Ok)
  24.          {
  25.                         LED1_OFF;
  26.          }
  27.                         can_delay(10000);
  28.                 if(flag==1)
  29.                 {               
  30.                         LED1_TOGGLE;
  31.                         flag=0;
  32.                 }
  33.         }
  34. }

复制代码
  1. #include "./can/bsp_can.h"


  2. static void CAN_GPIO_Config(void)
  3. {
  4.          GPIO_InitTypeDef GPIO_InitStructure;           

  5.   /* Enable GPIO clock */
  6.   RCC_APB2PeriphClockCmd(CAN_TX_GPIO_CLK|CAN_RX_GPIO_CLK, ENABLE);
  7. //        //ÖØÓ³ÉäÒý½Å
  8. //        GPIO_PinRemapConfig(GPIO_Remap1_CAN1, ENABLE);

  9.          /* Configure CAN TX pins */
  10.   GPIO_InitStructure.GPIO_Pin = CAN_TX_PIN;
  11.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;      
  12.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  13.   GPIO_Init(CAN_TX_GPIO_PORT, &GPIO_InitStructure);
  14.         
  15.         /* Configure CAN RX  pins */
  16.   GPIO_InitStructure.GPIO_Pin = CAN_RX_PIN ;
  17.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;   
  18.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  19.   GPIO_Init(CAN_RX_GPIO_PORT, &GPIO_InitStructure);
  20. }


  21. static void CAN_NVIC_Config(void)
  22. {
  23.            NVIC_InitTypeDef NVIC_InitStructure;
  24.     /* Configure one bit for preemption priority */
  25.     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
  26.     /*ÖжÏÉèÖÃ*/
  27.     NVIC_InitStructure.NVIC_IRQChannel = CAN_RX_IRQ;  
  28.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;  
  29.     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;   
  30.     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  31.     NVIC_Init(&NVIC_InitStructure);
  32. }

  33. /*
  34. * º¯ÊýÃû£ºCAN_Mode_Config
  35. * ÃèÊö  £ºCANµÄģʽ ÅäÖÃ
  36. * ÊäÈë  £ºÎÞ
  37. * Êä³ö  : ÎÞ
  38. * µ÷Óà £ºÄÚ²¿µ÷ÓÃ
  39. */
  40. static void CAN_Mode_Config(void)
  41. {
  42.         CAN_InitTypeDef        CAN_InitStructure;
  43.    
  44.         /* Enable CAN clock */
  45.   RCC_APB1PeriphClockCmd(CAN_CLK, ENABLE);

  46.         /*CAN¼Ä´æÆ÷³õʼ»¯*/
  47.         CAN_DeInit(CANx);
  48.         CAN_StructInit(&CAN_InitStructure);

  49.         /*CANµ¥Ôª³õʼ»¯*/
  50.         CAN_InitStructure.CAN_TTCM=DISABLE;   
  51.         CAN_InitStructure.CAN_ABOM=DISABLE;   
  52.         CAN_InitStructure.CAN_AWUM=ENABLE;   
  53.         CAN_InitStructure.CAN_NART=DISABLE;     
  54.         CAN_InitStructure.CAN_RFLM=DISABLE;     
  55.         CAN_InitStructure.CAN_TXFP=ENABLE;      
  56.         CAN_InitStructure.CAN_Mode = CAN_Mode_Normal
  57.         CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;
  58.         CAN_InitStructure.CAN_BS1=CAN_BS1_10tq
  59.         CAN_InitStructure.CAN_BS2=CAN_BS2_5tq
  60.         CAN_InitStructure.CAN_Prescaler =18
  61.         CAN_Init(CANx, &CAN_InitStructure);
  62. }
复制代码
在中断里接受

  1. extern __IO uint32_t flag ;
  2. extern CanRxMsg RxMessage;   


  3. void CAN_RX_IRQHandler(void)
  4. {
  5.    
  6.         CAN_Receive(CANx, CAN_FIFO0, &RxMessage);

  7.    
  8.         if((RxMessage.ExtId==0x1314) && (RxMessage.IDE==CAN_ID_EXT)  )//&& (RxMessage.DLC==8)
  9.         {
  10.         flag = 1;   
  11.         }
  12.         else
  13.         {
  14.         flag = 0;                                            
  15.         }
  16. }
复制代码

回复

使用道具 举报

ID:111463 发表于 2023-7-10 15:45 | 显示全部楼层
请确认 两者设置条件一致,从描述上来看 125MHZ?这是不可能达到的通信速率,主频一般都不能超过72Mhz
回复

使用道具 举报

ID:1078313 发表于 2023-7-10 16:26 | 显示全部楼层
sbskywalker 发表于 2023-7-10 15:45
请确认 两者设置条件一致,从描述上来看 125MHZ?这是不可能达到的通信速率,主频一般都不能超过72Mhz

STM32的can的最大速率不是可以达到1MHZ吗?
回复

使用道具 举报

ID:1078313 发表于 2023-7-10 16:28 | 显示全部楼层
sbskywalker 发表于 2023-7-10 15:45
请确认 两者设置条件一致,从描述上来看 125MHZ?这是不可能达到的通信速率,主频一般都不能超过72Mhz

程序里应该是125khz
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表