[AT32F403/403A] AT32F403A CAN转USB(虚拟串口)

[复制链接]
 楼主| 梦境漫游者 发表于 2025-2-28 16:07 | 显示全部楼层 |阅读模式
内部循环模式时板子能够正常工作,当切换为正常通讯模式后,
CAN会卡死在:state_index = CAN_TX_STATUS_PENDING;
雅特力官方程序如下:
  1. void can_gpio_config(void)
  2. {
  3.   gpio_init_type gpio_init_struct;
  4.   crm_periph_clock_enable(CRM_GPIOB_PERIPH_CLOCK, TRUE);
  5.   crm_periph_clock_enable(CRM_IOMUX_PERIPH_CLOCK, TRUE);
  6.   gpio_pin_remap_config(CAN1_GMUX_0010,TRUE);
  7.   gpio_default_para_init(&gpio_init_struct);
  8.   /* can tx pin */
  9.   gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
  10.   gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
  11.   gpio_init_struct.gpio_mode = GPIO_MODE_MUX;
  12.   gpio_init_struct.gpio_pins = GPIO_PINS_9;
  13.   gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
  14.   gpio_init(GPIOB, &gpio_init_struct);
  15.   /* can rx pin */
  16.   gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
  17.   gpio_init_struct.gpio_mode = GPIO_MODE_INPUT;
  18.   gpio_init_struct.gpio_pins = GPIO_PINS_8;
  19.   gpio_init_struct.gpio_pull = GPIO_PULL_UP;
  20.   gpio_init(GPIOB, &gpio_init_struct);
  21. }
  22. void can_configuration(void)
  23. {   
  24.   can_base_type can_base_struct;
  25.   can_baudrate_type can_baudrate_struct;
  26.   can_filter_init_type can_filter_init_struct;
  27.   crm_periph_clock_enable(CRM_CAN1_PERIPH_CLOCK, TRUE);
  28.   /* can base init */
  29.   can_default_para_init(&can_base_struct);
  30.   can_base_struct.mode_selection = CAN_MODE_COMMUNICATE;
  31.   can_base_struct.ttc_enable = FALSE;
  32.   can_base_struct.aebo_enable = TRUE;
  33.   can_base_struct.aed_enable = TRUE;
  34.   can_base_struct.prsf_enable = FALSE;
  35.   can_base_struct.mdrsel_selection = CAN_DISCARDING_FIRST_RECEIVED;
  36.   can_base_struct.mmssr_selection = CAN_SENDING_BY_ID;
  37.   can_base_init(CAN1, &can_base_struct);
  38.   /* can baudrate, set baudrate = pclk/(baudrate_div *(3 + bts1_size + bts2_size)) */
  39.   can_baudrate_struct.baudrate_div = 10;
  40.   can_baudrate_struct.rsaw_size = CAN_RSAW_1TQ;
  41.   can_baudrate_struct.bts1_size = CAN_BTS1_8TQ;
  42.   can_baudrate_struct.bts2_size = CAN_BTS2_3TQ;
  43.   can_baudrate_set(CAN1, &can_baudrate_struct);
  44.   /* can filter init */
  45.   can_filter_init_struct.filter_activate_enable = TRUE;
  46.   can_filter_init_struct.filter_mode = CAN_FILTER_MODE_ID_MASK;
  47.   can_filter_init_struct.filter_fifo = CAN_FILTER_FIFO0;
  48.   can_filter_init_struct.filter_number = 0;
  49.   can_filter_init_struct.filter_bit = CAN_FILTER_32BIT;
  50.   can_filter_init_struct.filter_id_high = 0;
  51.   can_filter_init_struct.filter_id_low = 0;
  52.   can_filter_init_struct.filter_mask_high = 0;
  53.   can_filter_init_struct.filter_mask_low = 0;
  54.   can_filter_init(CAN1, &can_filter_init_struct);
  55.   /* can interrupt config */
  56.   nvic_irq_enable(CAN1_SE_IRQn, 0x00, 0x00);
  57.   nvic_irq_enable(USBFS_L_CAN1_RX0_IRQn, 0x00, 0x00);
  58.   can_interrupt_enable(CAN1, CAN_RF0MIEN_INT, TRUE);
  59.   can_interrupt_enable(CAN1, CAN_ETRIEN_INT, TRUE);
  60.   can_interrupt_enable(CAN1, CAN_EOIEN_INT, TRUE);
  61. }
  62. void can_transmit_data(void)
  63. {
  64.   uint8_t transmit_mailbox;  
  65.   can_tx_message_type tx_message_struct;
  66.   tx_message_struct.standard_id = 0x400;
  67.   tx_message_struct.extended_id = 0;
  68.   tx_message_struct.id_type = CAN_ID_STANDARD;
  69.   tx_message_struct.frame_type = CAN_TFT_DATA;
  70.   tx_message_struct.dlc = 8;
  71.   tx_message_struct.data[0] = 0x11;
  72.   tx_message_struct.data[1] = 0x22;
  73.   tx_message_struct.data[2] = 0x33;
  74.   tx_message_struct.data[3] = 0x44;
  75.   tx_message_struct.data[4] = 0x55;
  76.   tx_message_struct.data[5] = 0x66;
  77.   tx_message_struct.data[6] = 0x77;
  78.   tx_message_struct.data[7] = 0x88;
  79.   transmit_mailbox = can_message_transmit(CAN1, &tx_message_struct);
  80.   while(can_transmit_status_get(CAN1, (can_tx_mailbox_num_type)transmit_mailbox) != CAN_TX_STATUS_SUCCESSFUL);
  81. }



HeTui 发表于 2025-3-25 10:44 | 显示全部楼层
你好,你的源程序可以看下吗,刚好我也在弄最近,我现在的是CAN-UART
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

32

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部