Jump to content

    

Andrew_Q

Участник
  • Content Count

    17
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Andrew_Q

  • Rank
    Участник

Recent Profile Visitors

304 profile views
  1. STM32F407VG + LAN8720 ETH BOARD (Waveshare)

    CubeMX генерирует драйвер не для LAN8720. Смотрите работу с PHY_SR.
  2. Актуально, добавлю резюме. https://krasnodar.hh.ru/resume/8ba255aeff0681fe920039ed1f364a7952776d#key-skills
  3. Мы выпускаем подобный речевой информатор, я его разработчик. Если интересно: kunev@mail.ru
  4. stm32f103c8t6 + CAN + Hard Fault

    А ларчик просто не открывался :-)
  5. stm32f103c8t6 + CAN + Hard Fault

    Смотрите что конкретно делает HAL_CAN_AddTxMessage(). Что берет? Куда кладет? Как выбирает мэйлбокс? Как его освобождает?
  6. Приведите тип к int. switch((uint32_t)hcan->Instance) { case (uint32_t)CAN1: /* CAN1 Process */ break; case (uint32_t)CAN2: /* CAN2 Process */ break; }
  7. stm32f103c8t6 + CAN + Hard Fault

    CAN контроллер на STM не видит доставки сообщения. 1. Ошибка в физике CAN. 2. Никто не отвечает Acknowledgement. И еще, почему в программе ID = 0x321, а на приеме 0x448? Передается не то или не оттуда? А после HAL_CAN_AddTxMessage(&hcan, &Tx_Header, Tx_Data, &mail_Box); не нужно дождаться окончания передачи сбросить мэйлбокс? ( В версии HAL, что я использую, такой функции нет, поэтом не знаю чем она завершается)
  8. stm32f103c8t6 + CAN + Hard Fault

    Верно-верно. Что-то не вижу буфер для CanTxMsgTypeDef *pTxMsg в CAN_HandleTypeDef hcan.
  9. Дак, Вам , вроде передается указатель типа CAN_HandleTypeDef на устройство. Проверить чему равен hcan и вызвать соответствующий обработчик. switch(hcan->Instance) { case CAN1: /* CAN1 Process */ break; case CAN2: /* CAN2 Process */ break; }
  10. В 2020 году планирую переезд в Краснодарский край, Адыгею. Соответственно необходимо подыскивать работу. Конкретный город по результатам поиска работы. О себе: 53 года, в разработке с 1990 года. STM32, AVR, интерфейсы, регуляторы, схемотехника, программирование, C, ассемблер. В меньшей мере полевая автоматизация АСУТП (ISAGRAF, CodeSys). Общие навыки администрирования сетей и UNIX-подобных серверов. Общие навыки проектирования и строительства ВОЛС. kunev@mail.ru
  11. CAN_stm32

    Осмелюсь предположить, что нет сброса битов прерывания. Кодvoid CAN1_TX_IRQHandler(void) {   /* USER CODE BEGIN CAN1_TX_IRQn 0 */     HAL_NVIC_ClearPendingIRQ(CAN1_TX_IRQn);   /* USER CODE END CAN1_TX_IRQn 0 */   HAL_CAN_IRQHandler(&hcan1);   /* USER CODE BEGIN CAN1_TX_IRQn 1 */   /* USER CODE END CAN1_TX_IRQn 1 */ } /** * @brief This function handles CAN1 RX0 interrupts. */ void CAN1_RX0_IRQHandler(void) {   /* USER CODE BEGIN CAN1_RX0_IRQn 0 */     HAL_NVIC_ClearPendingIRQ(CAN1_RX0_IRQn);   /* USER CODE END CAN1_RX0_IRQn 0 */   HAL_CAN_IRQHandler(&hcan1);   /* USER CODE BEGIN CAN1_RX0_IRQn 1 */   /* USER CODE END CAN1_RX0_IRQn 1 */ }
  12. Опечатка? Я хронический лентяй, программа работает на изделии с 2002 года. Исправлять лениво :-) Цитата(demiurg_spb @ Jul 14 2016, 14:45) Терминология MONOBLOCK не из оперы modbus. Всегда поражаюсь людям изобретающим велосипеды... Моноблок - это блоки нашей разработки на кастомном протоколе. А сие поделие является шлюзом в Modbus. Вот, кстати, ссылка на автомат конечных состояний, описанный таблицей, управляемый событиями. http://chipenable.ru/index.php/programming...nizatsiya-progr
  13. Цитата(Владивольт @ Jul 14 2016, 14:14) Как быть с ветвлением, т.е. если новое состояние определяется исходом действия? По исходу действия генерируем событие, в таблице описываем переход по этому событию в нужное состояние. У меня таблица выглядит так CODE__flash state_table_type STATE_MODBUS_NASTER_TABLE[]= // Таблица состояний, условий перехода и действий режима ModBus мастер { /* из состояния по событию выполнить в состояние в режим */ {ANY_STATE, NOT_NET_ACCESS, init_state_mashine, INIT, MODBUS_MASTER}, {ANY_STATE, TIMER_OVFL, init_state_mashine, INIT, MODBUS_MASTER}, {INIT, NET_ACCESS, request_ana_from_monoblock, WAIT_MONOBLOCK_ANA, MODBUS_MASTER}, {WAIT_MONOBLOCK_ANA, MONOBLOCK_DATA_RECEIVED,send_ana_to_modbus, WAIT_CHECK_MODBUS_ANA, MODBUS_MASTER}, {WAIT_CHECK_MODBUS_ANA, MODBUS_SENDED, receive_ana_modbus_check, NO_NEW_STATE, MODBUS_MASTER}, {WAIT_CHECK_MODBUS_ANA, MODBUS_RECEIVED, test_ana_modbus_check, NO_NEW_STATE, MODBUS_MASTER}, }
  14. Цитата(adnega @ Jul 14 2016, 12:53) А кто придумывает номера для "состояний"? При добавлении новой записи нужно править поле "перейти в новое состояние" предыдущей записи? Или можно ставить только поля "событие" и "выполнить действие" а выполняться все будет линейно пока не дойдет до конца таблицы? Еще один enum Если при правке выясняется, что нужно перейти в другое состояние, то да, нужно исправлять. Если планируется, что все будет выполняться линейно, то это проще прописать в парсере один раз, тогда поле "перейти в состояние" в таблице отмирает.
  15. Я использую таблицу состояний автомата именно в виде таблицы во флеш, а парсер этой таблицы ее просто сканирует и выполняет действия в соответствии "состояние-событие-выполнить действие-перейти в новое состояние". В этом случае вся логика автомата содержится в таблице и любое добавление, удаление или редактирование любой строки влияет только на действия именно этой строки.