Перейти к содержанию
    

sicilla

Участник
  • Постов

    11
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о sicilla

  • Звание
    Участник
    Участник

Информация

  • Город
    Array

Посетители профиля

Блок последних пользователей отключён и не показывается другим пользователям.

  1. Ну если вам нравится, когда всё в куче, пожалуйста. Можно ведь создать подраздел подраздела. Байты стерпят
  2. Да, согласен. Буду анализировать и смотреть потери
  3. Добрый день Есть связка приём CAN -> обработка сигналов -> отправка в USB. Я поставил кольцевой буфер после обработки сигналов. А как правильно использовать, до обработки, или после? Во всех примерах, что встречал, получается после обработки МК Artery. Без кольцевого буфера тоже проблем не наблюдалось
  4. Добрый день Выполнение переноса прошивки с STM32 на Artery AT32F4xx, разработка прошивки для AT32F4xx, в том числе совместно с программным обеспечением на Андроид (Windows). Удалённо. Стоимость работ по договорённости О себе: автор и программист проекта VestaXR https://vestaxr.ru (приложение на Андроиде + прошивка канбаса STM32, затем миграция на AT32), автор приложений для Андроида ServiceNote, VestaFAQ Автор статей AT32F403A часть 1, AT32F403A часть 2, AT32F403A часть 3, AT32F403A часть 4 Связаться со мной можно ВК: https://vk.com/arty_morris Телеграмм: https://t.me/sicilla59
  5. Разобрался, с помощью их прикладной программы AT32_New_Clock_Configuration_V3.0.05 установил тайминги как на картинке. Может кому поможет
  6. Естественно читал, расчет настройки can делал по их приложению. Но видимо пропустил настройку частоты. Разбираюсь. Если что, я первый раз серьёзно столкнулся с МК. Не пинайте
  7. Нашёл проблему void system_clock_config(void) CAN работает при частоте crm_pll_config(CRM_PLL_SOURCE_HEXT_DIV, CRM_PLL_MULT_60, CRM_PLL_OUTPUT_RANGE_GT72MHZ); USB работает при частоте crm_pll_config(CRM_PLL_SOURCE_HEXT_DIV, CRM_PLL_MULT_48, CRM_PLL_OUTPUT_RANGE_GT72MHZ); Как подружить?
  8. Опытным путём нашёл что причина в конфигурации CAN static void can_configuration(void) { can_base_type can_base_struct; can_baudrate_type can_baudrate_struct; can_filter_init_type can_filter_init_struct; crm_periph_clock_enable(CRM_CAN1_PERIPH_CLOCK, TRUE); /* can base init */ can_default_para_init(&can_base_struct); can_base_struct.mode_selection = CAN_MODE_COMMUNICATE; <---- меняем на loopback и работает can_base_struct.ttc_enable = FALSE; can_base_struct.aebo_enable = TRUE; can_base_struct.aed_enable = TRUE; can_base_struct.prsf_enable = FALSE; can_base_struct.mdrsel_selection = CAN_DISCARDING_FIRST_RECEIVED; can_base_struct.mmssr_selection = CAN_SENDING_BY_ID; can_base_init(CAN1, &can_base_struct); /* can baudrate, set baudrate = pclk/(baudrate_div *(1 + bts1_size + bts2_size)) */ can_baudrate_default_para_init(&can_baudrate_struct); can_baudrate_struct.baudrate_div = 30; can_baudrate_struct.rsaw_size = CAN_RSAW_1TQ; can_baudrate_struct.bts1_size = CAN_BTS1_6TQ; can_baudrate_struct.bts2_size = CAN_BTS2_1TQ; can_baudrate_set(CAN1, &can_baudrate_struct); /* can filter init */ can_filter_init_struct.filter_activate_enable = TRUE; can_filter_init_struct.filter_mode = CAN_FILTER_MODE_ID_MASK; can_filter_init_struct.filter_fifo = CAN_FILTER_FIFO0; can_filter_init_struct.filter_number = 0; can_filter_init_struct.filter_bit = CAN_FILTER_32BIT; can_filter_init_struct.filter_id_high = 0; can_filter_init_struct.filter_id_low = 0; can_filter_init_struct.filter_mask_high = 0; can_filter_init_struct.filter_mask_low = 0; can_filter_init(CAN1, &can_filter_init_struct); /* can interrupt config */ nvic_irq_enable(CAN1_SE_IRQn, 0, 0); nvic_irq_enable(USBFS_L_CAN1_RX0_IRQn, 0, 0); can_interrupt_enable(CAN1, CAN_RF0MIEN_INT, TRUE); /* error interrupt enable */ can_interrupt_enable(CAN1, CAN_ETRIEN_INT, TRUE); can_interrupt_enable(CAN1, CAN_EOIEN_INT, TRUE); } На прерывании USBFS_L_CAN1_RX0_IRQ сидит и USB и CAN void USBFS_L_CAN1_RX0_IRQHandler (void) { can_rx_message_type rx_message_struct; if(can_flag_get(CAN1,CAN_RF0MN_FLAG) != RESET) { can_message_receive(CAN1, CAN_RX_FIFO0, &rx_message_struct); if (rx_message_struct.standard_id == 0x500) { at32_led_toggle(LED3); } } usbd_irq_handler(&usb_core_dev); } Куда двигаться дальше не знаю
  9. Добрый день. Такая проблема. Не могу заставить в одном коде работать USB и CAN. Основу программы сделал на базе AT32F403A_407_Firmware_Library -> virtual_comport, вставил туда таймеры. Всё работает нормально. Взял пример communication_mode, CAN работает в обе стороны, хорошо. Вставляю код с CAN в основной листинг, и CAN не подключается. Подскажите пожалуйста куда копать, и какие строчки нужно привести для понимания того, что я написал
×
×
  • Создать...