Форум РадиоКот https://radiokot.ru/forum/ |
|
Stm32 (nucleo-h743zi2) SPI, CAN https://radiokot.ru/forum/viewtopic.php?f=59&t=180053 |
Страница 1 из 1 |
Автор: | anatoliydenisenko44 [ Чт дек 09, 2021 01:40:15 ] |
Заголовок сообщения: | Stm32 (nucleo-h743zi2) SPI, CAN |
Всем привет. Возможно я очередной спамер, но информации нужной мне не нашел на просторах интернет. И спустя 3 дня кручения и танцев с бубном - прошу о помощи. В общем есть плата nucleo-144 h743zi2. И в ней есть CAN интерфейс, через который мне нужно реализовать протокол передачи. В связке Uno + mcp2515 протокол был отработан и все работает как часы. Теперь надо все перенести на nucleo, и что не маловажно - это использование Arduino IDE. В общем я ходил смотрел включал выключал порты на которых есть can интерфейс, но ничего не получилось. Подумал я что надо бы попробовать подключить модуль mcp2515 через SPI. И тут встал вопрос а как же эти порты SPI мне обьявить в той же Arduino IDE? Может у кого то есть примеры для других камней? или есть подсказка как и что именно с этой платой. Я знаю что, вы скажите - пиши на STM32CUBEIde ( ребята, пока я в процессе обучения, сложный он, менее понятный) Код: #include <SPI.h>
#include <mcp2515.h> #define MOSI PB5 #define MISO PB4 #define SCLK PB3 #define ledPin PC13 #define buttonPin PA0 byte data; struct can_frame canMsg; struct can_frame canMsg1; struct can_frame canMsg2; MCP2515 mcp2515(PA4); void setup () { while (!Serial); Serial.begin(115200); mcp2515.reset(); mcp2515.setBitrate(CAN_1000KBPS, MCP_8MHZ); mcp2515.setNormalMode (); //mcp2515.setLoopbackMode(); //mcp2515.setListenOnlyMode(); Serial.println("Example: Write to CAN"); canMsg1.can_id = 0x142; canMsg1.can_dlc = 8; canMsg1.data[0] = 0x88; //старт мотор canMsg1.data[1] = 0x00; canMsg1.data[2] = 0x00; canMsg1.data[3] = 0x00; canMsg1.data[4] = 0x00; canMsg1.data[5] = 0x00; canMsg1.data[6] = 0x00; canMsg1.data[7] = 0x00; canMsg2.can_id = 0x142; canMsg2.can_dlc = 8; canMsg2.data[0] = 0xA1; canMsg2.data[1] = 0x00; canMsg2.data[2] = 0x00; canMsg2.data[3] = 0x00; canMsg2.data[4] = 0x00; canMsg2.data[5] = 0x50; canMsg2.data[6] = 0x00; canMsg2.data[7] = 0x00; mcp2515.sendMessage(&canMsg1); } void loop(void) { mcp2515.sendMessage(&canMsg2); Serial.println("Messages sent"); if (mcp2515.readMessage(&canMsg1) == MCP2515::ERROR_OK) { Serial.print(canMsg.can_id, HEX); // print ID Serial.print(" "); for (int i = 0; i<10; i++) { // print the data Serial.print(canMsg.data[i],HEX); Serial.print(" "); } Serial.println(); } delay(1000); } |
Автор: | Dimon456 [ Чт дек 09, 2021 08:25:47 ] |
Заголовок сообщения: | Re: Stm32 (nucleo-h743zi2) SPI, CAN |
Давно хотел попробовать Спойлер![]() ![]() |
Автор: | anatoliydenisenko44 [ Чт дек 09, 2021 08:35:49 ] |
Заголовок сообщения: | Re: Stm32 (nucleo-h743zi2) SPI, CAN |
Та, как поставить платы в редактор я знаю. У меня больше вопрос как работать с портами а точнее с интерфейсами самой платы, psi, can bus. |
Автор: | Dimon456 [ Чт дек 09, 2021 08:52:18 ] |
Заголовок сообщения: | Re: Stm32 (nucleo-h743zi2) SPI, CAN |
Это же ардуино, там должно быть все заточено, должны быть хоть какие-то примеры. По идеи ваш, выше приведенный, код должен собраться под любую плату. У мну таких плат нету, есть f030 и f100, в списке поддерживаемых их нет, и пытаться проверять не буду. Установщик ардуино должен скачать компилятор gcc_arm, одним словом, проверяйте сами. |
Автор: | oleg110592 [ Чт дек 09, 2021 09:07:32 ] |
Заголовок сообщения: | Re: Stm32 (nucleo-h743zi2) SPI, CAN |
Подумал я что надо бы попробовать подключить модуль mcp2515 через SPI. И тут встал вопрос а как же эти порты SPI мне обьявить в той же Arduino IDE? вики страница АПИ stm32duino: https://github.com/stm32duino/wiki/wiki/API#spi Код: #include <SPI.h>
// MOSI MISO SCLK SPIClass SPI3(PC12, PC11, PC10); void setup() { SPI3.begin(2); //Enables the SPI3 instance with default settings and attaches the CS pin SPI3.beginTransaction(1, settings); //Attaches another CS pin and configure the SPI3 instance with other settings SPI3.transfer(2, 0x52); //Transfers data to the first device SPI3.transfer(1, 0xA4); //Transfers data to the second device. The SPI3 instance is configured with the right settings SPI3.end() //SPI3 instance is disabled } |
Автор: | Dimon456 [ Чт дек 09, 2021 14:18:17 ] |
Заголовок сообщения: | Re: Stm32 (nucleo-h743zi2) SPI, CAN |
Список поддерживаемых STM32 довольно широк Спойлер![]() Очень очень долго сборка идет, можно два раза поспать. Ардуиновский Blink под STM32F100RB в минимальной конфигурации Цитата: Скетч использует 7544 байт (5%) памяти устройства. Всего доступно 131072 байт. Глобальные переменные используют 868 байт (10%) динамической памяти, оставляя 7324 байт для локальных переменных. Максимум: 8192 байт. СпойлерКод: // the setup function runs once when you press reset or power the board void setup() { // initialize digital pin LED_BUILTIN as an output. pinMode(LED_BUILTIN, OUTPUT); } // the loop function runs over and over again forever void loop() { digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW delay(1000); // wait for a second } Такой код СпойлерКод: void setup () { Serial.begin (9600); // Задаем скорость обмена uart-порта 9600 Serial.println ("Hello World!"); // Пишем в консоль "Hello World!" } void loop () { } Цитата: Скетч использует 7692 байт (5%) памяти устройства. Всего доступно 131072 байт. Глобальные переменные используют 868 байт (10%) динамической памяти, оставляя 7324 байт для локальных переменных. Максимум: 8192 байт. В работе на реальном устройстве не проверялось, на на выходе создается hex bin elf map куча объектников, размер bin последнего кода 8176 байта. Прямая загрузка из Ардуино иде не проверялась, так как требуется еще установить stm32cubeprg. Вот кусок из map файла СпойлерКод: 0x20002000 _estack = (ORIGIN (RAM) + LENGTH (RAM)) 0x00000200 _Min_Heap_Size = 0x200 0x00000400 _Min_Stack_Size = 0x400 .isr_vector 0x08000000 0x1d0 0x08000000 . = ALIGN (0x4) *(.isr_vector) .isr_vector 0x08000000 0x1d0 C:\Users\xxx\AppData\Local\Temp\arduino_cache_441161\core\core_cd72577ee8b54c7a4a749e3b95957d2b.a(startup_stm32yyxx.S.o) 0x08000000 g_pfnVectors 0x080001d0 . = ALIGN (0x4) .text 0x080001d0 0x1b84 0x080001d0 . = ALIGN (0x4) *(.text) .text 0x080001d0 0x1510 C:\Users\xxx\AppData\Local\Temp\sketch_dec09a.ino.elf.c7TRF4.ltrans0.ltrans.o 0x080013bc _sbrk 0x080013f8 _close 0x080013fe _fstat 0x08001408 _isatty 0x0800140c _lseek 0x08001410 _read 0x08001414 _exit 0x08001416 _kill 0x08001428 _getpid 0x0800142c SysTick_Handler 0x0800143c SystemInit 0x0800148c USART1_IRQHandler 0x080014a4 USART2_IRQHandler 0x080014c0 USART3_IRQHandler 0x080014dc EXTI0_IRQHandler 0x080014e0 EXTI1_IRQHandler 0x080014e4 EXTI2_IRQHandler 0x080014e8 EXTI3_IRQHandler 0x080014ec EXTI4_IRQHandler 0x080014f0 EXTI9_5_IRQHandler 0x08001506 EXTI15_10_IRQHandler 0x0800151e TIM1_UP_TIM16_IRQHandler 0x08001520 TIM1_CC_IRQHandler 0x08001522 TIM2_IRQHandler 0x08001524 TIM3_IRQHandler 0x08001526 TIM4_IRQHandler 0x08001528 TIM6_DAC_IRQHandler 0x0800152a TIM7_IRQHandler 0x0800152c TIM1_BRK_TIM15_IRQHandler 0x0800152e TIM1_TRG_COM_TIM17_IRQHandler 0x08001530 _write 0x080016d4 __cxa_pure_virtual 0x080016d6 operator delete(void*) 0x080016da operator delete(void*, unsigned int) *(.text*) .text.__do_global_dtors_aux 0x080016e0 0x24 c:/users/xxx/appdata/local/arduino15/packages/stmicroelectronics/tools/xpack-arm-none-eabi-gcc/10.2.1-1.1/bin/../lib/gcc/arm-none-eabi/10.2.1/thumb/v7-m/nofp/crtbegin.o .text.frame_dummy 0x08001704 0x1c c:/users/xxx/appdata/local/arduino15/packages/stmicroelectronics/tools/xpack-arm-none-eabi-gcc/10.2.1-1.1/bin/../lib/gcc/arm-none-eabi/10.2.1/thumb/v7-m/nofp/crtbegin.o .text.startup 0x08001720 0x3ec C:\Users\xxx\AppData\Local\Temp\sketch_dec09a.ino.elf.c7TRF4.ltrans0.ltrans.o 0x080019a0 main .text.exit 0x08001b0c 0x24 C:\Users\xxx\AppData\Local\Temp\sketch_dec09a.ino.elf.c7TRF4.ltrans0.ltrans.o .text.Reset_Handler 0x08001b30 0x48 C:\Users\xxx\AppData\Local\Temp\arduino_cache_441161\core\core_cd72577ee8b54c7a4a749e3b95957d2b.a(startup_stm32yyxx.S.o) 0x08001b30 Reset_Handler .text.Default_Handler 0x08001b78 0x2 C:\Users\xxx\AppData\Local\Temp\arduino_cache_441161\core\core_cd72577ee8b54c7a4a749e3b95957d2b.a(startup_stm32yyxx.S.o) 0x08001b78 RTC_Alarm_IRQHandler 0x08001b78 DebugMon_Handler 0x08001b78 HardFault_Handler 0x08001b78 PVD_IRQHandler 0x08001b78 PendSV_Handler 0x08001b78 NMI_Handler 0x08001b78 UsageFault_Handler 0x08001b78 SPI1_IRQHandler 0x08001b78 TAMPER_IRQHandler 0x08001b78 DMA1_Channel4_IRQHandler 0x08001b78 ADC1_IRQHandler 0x08001b78 RTC_IRQHandler 0x08001b78 DMA1_Channel7_IRQHandler 0x08001b78 I2C1_EV_IRQHandler 0x08001b78 DMA1_Channel6_IRQHandler 0x08001b78 RCC_IRQHandler 0x08001b78 DMA1_Channel1_IRQHandler 0x08001b78 Default_Handler 0x08001b78 CEC_IRQHandler 0x08001b78 MemManage_Handler 0x08001b78 SVC_Handler 0x08001b78 DMA1_Channel5_IRQHandler 0x08001b78 DMA1_Channel3_IRQHandler 0x08001b78 WWDG_IRQHandler 0x08001b78 DMA1_Channel2_IRQHandler 0x08001b78 FLASH_IRQHandler 0x08001b78 BusFault_Handler 0x08001b78 I2C1_ER_IRQHandler И дополнительно +1,3 Гигабайта мусора на жестком диске. |
Автор: | Ярослав555 [ Чт дек 09, 2021 15:32:44 ] |
Заголовок сообщения: | Re: Stm32 (nucleo-h743zi2) SPI, CAN |
а дальше полный бред, каким он был, таким и остался. Очень очень долго сборка идет, можно два раза поспать. Недавно мне пришлось делать проект под нордик через ардуину - захотел клиент и все тут. Я проклял все на свете, за то что связался с этим говном. Во первых отладка - она типа есть, но еще типа нет. Как-то удалось подцепить джилинк и завести вижуал студию. Очередной сюрприз - оптимизация жрет код, невозможно тлаживать. Иду без задней мысли в настройки, отрубаю опитимизацию и приехали! Эти дебилы так написали свои говноино библиотеки, что они без оптимизации не собираются! Потому что есть нереализованные виртуальные методы в класах. Когда работает оптимизацмя - они режутся и все вроде ок. Но стоит отрубить это все - и приехали. Почему долго собирает? Потому что это говно (вижуал студия) сканирует библиотеки каждый раз при сборке. Теперь про кан и H743. Чел, ты вообще даташит открывал? Ты видел структуру чипа, сколько там разных банок памяти, сколько там шин, что там есть кеш, какое тактирование сложное? Что там вообще-то не CAN, а FDCAN? У меня есть проект на H743 с каном. И оно работает. Не выделывайся - ставь CubeIde. Делай проект через визард - среда скачает РЕПОЗИТОРИЙ. И там в репозитории кроме библиотек будут рабочие ПРИМЕРЫ. Если у тебя задача не сложная, можно прямо взять готовый пример за основу и слегка переделать. Более того, для таких чуваков даже сделали специальный ИМПОРТ примеров из репозитория куда надо. Файл-Импорт-Дженерал-Импорт стм32куб экзампл. |
Автор: | anatoliydenisenko44 [ Чт дек 09, 2021 18:31:03 ] |
Заголовок сообщения: | Re: Stm32 (nucleo-h743zi2) SPI, CAN |
Я платы установил, поддержку нужной мне stm32 все есть. На плате Uno + mcp2515 я протокол для управления реализовал, но там просто у ардуины один SPI и я в него. И вот встал вопрос что бы реализовать это все для stm32 и arduino ide. И я подключаю модуль mcp2515 в разметку по пинам SPI1 ![]() И что мне делать дальше что бы это чудо начало работать? Код: #include <SPI.h>
#include <mcp2515.h> #include <ros2arduino.h> #include <user_config.h> //#define VSPI_CLOCK_PIN 39 //4 //#define VSPI_MOSI_PIN 36 // 15 //#define VSPI_MISO_PIN 38//32 #define VSPI_CS_MCP2515_PIN 5//34//25 #define RMD_X6_READ_PID_DATA (0x30) #define RMD_X6_WRITE_PID_TO_RAM (0x31) #define RMD_X6_WRITE_PID_TO_ROM (0x32) #define RMD_X6_READ_ACCELERATION (0x33) #define RMD_X6_WRITE_ACCELERATION (0x34) #define RMD_X6_READ_ENCODE_DATA (0x90) #define RMD_X6_WRITE_ENCODER_OFFSET (0x91) #define RMD_X6_WRITE_CURRENT_POSITION (0x19) #define RMD_X6_READ_MULTI_TURNS_ANGLE (0x92) #define RMD_X6_READ_SINGLE_CIRCLE_ANGLE (0x94) #define RMD_X6_READ_MOTOR_STATUS (0x9A) #define RMD_X6_CLEAR_MOTOR_ERROR_FLAG (0x9B) #define RMD_X6_READ_MOTOR_STATUS_2 (0x9C) #define RMD_X6_READ_MOTOR_STATUS_3 (0x9D) #define RMD_X6_MOTOR_OFF (0x80) #define RMD_X6_MOTOR_STOP (0x81) #define RMD_X6_MOTOR_RUNNING (0x88) #define RMD_X6_TORQUE_CLOSED_LOOP (0xA1) #define RMD_X6_SPEED_CLOSED_LOOP (0xA2) #define RMD_X6_POSITION_CTRL_1 (0xA3) #define RMD_X6_POSITION_CTRL_2 (0xA4) #define RMD_X6_POSITION_CTRL_3 (0xA5) #define RMD_X6_POSITION_CTRL_4 (0xA6) #define RMD_X6_POSITION (0xA7) #define RMD_X6_STATUS_NULL (0x00) struct can_frame canMsg; MCP2515 can(VSPI_CS_MCP2515_PIN); //10 //RMD_X6_CAN_MSG_ID unsigned long leftFrontWheel = 0x142; // передний левый unsigned long leftBackWheel = 0x141; // задний левый unsigned long rightFrontWheel = 0x144; // передний правый unsigned long rightBackWheel = 0x143; // задний правый long wheelSpeed = 500; long wheelPos = 3600; //long GenPos1=-2600; //Left //long GenPos2= 2600; //Righ int8_t temperatureMotor; int16_t torqueCurrentMotor; int16_t speedMotor; uint16_t encoderMotor; void motorRun(unsigned long id) { canMsg.can_id = id; canMsg.can_dlc = 8; canMsg.data[0] = RMD_X6_MOTOR_RUNNING; canMsg.data[1] = RMD_X6_STATUS_NULL; canMsg.data[2] = RMD_X6_STATUS_NULL; canMsg.data[3] = RMD_X6_STATUS_NULL; canMsg.data[4] = RMD_X6_STATUS_NULL; canMsg.data[5] = RMD_X6_STATUS_NULL; canMsg.data[6] = RMD_X6_STATUS_NULL; canMsg.data[7] = RMD_X6_STATUS_NULL; can.sendMessage(&canMsg); } void motorStop(unsigned long id) { canMsg.can_id = id; canMsg.can_dlc = 8; canMsg.data[0] = RMD_X6_MOTOR_STOP; canMsg.data[1] = RMD_X6_STATUS_NULL; canMsg.data[2] = RMD_X6_STATUS_NULL; canMsg.data[3] = RMD_X6_STATUS_NULL; canMsg.data[4] = RMD_X6_STATUS_NULL; canMsg.data[5] = RMD_X6_STATUS_NULL; canMsg.data[6] = RMD_X6_STATUS_NULL; canMsg.data[7] = RMD_X6_STATUS_NULL; can.sendMessage(&canMsg); } void motorOff(unsigned long id) { canMsg.can_id = id; canMsg.can_dlc = 8; canMsg.data[0] = RMD_X6_MOTOR_OFF;//RMD_X6_MOTOR_STOP; canMsg.data[1] = RMD_X6_STATUS_NULL; canMsg.data[2] = RMD_X6_STATUS_NULL; canMsg.data[3] = RMD_X6_STATUS_NULL; canMsg.data[4] = RMD_X6_STATUS_NULL; canMsg.data[5] = RMD_X6_STATUS_NULL; canMsg.data[6] = RMD_X6_STATUS_NULL; canMsg.data[7] = RMD_X6_STATUS_NULL; can.sendMessage(&canMsg); } void readReply() { Serial.print(canMsg.can_id, HEX); // print ID Serial.print(" "); Serial.print(canMsg.can_dlc, HEX); // print DLC Serial.print(" "); for (int i = 0; i<canMsg.can_dlc; i++) { // print the data Serial.print(canMsg.data[i],HEX); Serial.print(" "); } Serial.println(); // Get motor temperature temperatureMotor = (int8_t)canMsg.data[1]; // Get motor torque current torqueCurrentMotor = (int16_t(canMsg.data[2]) << 8) | canMsg.data[3]; // Get motor speed speedMotor = (int16_t(canMsg.data[4]) << 8) | canMsg.data[5]; // Get motor encoder encoderMotor = (uint16_t(canMsg.data[6]) << 8) | canMsg.data[7]; // Cover dps to rpm speedMotor = speedMotor*60; speedMotor = speedMotor/360; Serial.print(temperatureMotor); Serial.print(" "); Serial.print(torqueCurrentMotor); Serial.print(" "); Serial.print(speedMotor); Serial.print(" "); Serial.print(encoderMotor); Serial.print(" "); } void setPosition(unsigned long id, long wheelPos) { // Convert 1degree/LSB to 0.01degree/LSB wheelPos = wheelPos * 100; wheelPos = wheelPos * 6; canMsg.can_id = id; canMsg.can_dlc = 8; canMsg.data[0] = RMD_X6_POSITION_CTRL_1; canMsg.data[1] = RMD_X6_STATUS_NULL; canMsg.data[2] = RMD_X6_STATUS_NULL; canMsg.data[3] = RMD_X6_STATUS_NULL; canMsg.data[4] = wheelPos; canMsg.data[5] = wheelPos >> 8; canMsg.data[6] = wheelPos >> 16; canMsg.data[7] = wheelPos >> 24; can.sendMessage(&canMsg); delay(3); } void setVelocity(unsigned long id, long wheelSpeed) { // Cover rpm to dps wheelSpeed = wheelSpeed*360; wheelSpeed = wheelSpeed/60; // Cover 1dsp/LSB to 0.01dsp/LSB wheelSpeed = wheelSpeed * 100; canMsg.can_id = id; canMsg.can_dlc = 8; canMsg.data[0] = RMD_X6_SPEED_CLOSED_LOOP; canMsg.data[1] = RMD_X6_STATUS_NULL; canMsg.data[2] = RMD_X6_STATUS_NULL; canMsg.data[3] = RMD_X6_STATUS_NULL; canMsg.data[4] = wheelSpeed; canMsg.data[5] = wheelSpeed >> 8; canMsg.data[6] = wheelSpeed >> 16; canMsg.data[7] = wheelSpeed >> 24; can.sendMessage(&canMsg); delay(3); } void moveForward() { setVelocity(leftFrontWheel, wheelSpeed); setVelocity(leftBackWheel, wheelSpeed); setVelocity(rightFrontWheel, wheelSpeed); setVelocity(rightBackWheel, wheelSpeed); } void moveBackward() { setVelocity(leftFrontWheel, -wheelSpeed); setVelocity(leftBackWheel, -wheelSpeed); setVelocity(rightFrontWheel, -wheelSpeed); setVelocity(rightBackWheel, -wheelSpeed); } void moveSidewaysRight() { setVelocity(leftFrontWheel, wheelSpeed); setVelocity(leftBackWheel, -wheelSpeed); setVelocity(rightFrontWheel, -wheelSpeed); setVelocity(rightBackWheel, wheelSpeed); } void moveSidewaysLeft() { setVelocity(leftFrontWheel, -wheelSpeed); setVelocity(leftBackWheel, wheelSpeed); setVelocity(rightFrontWheel, wheelSpeed); setVelocity(rightBackWheel, -wheelSpeed); } void rotateLeft() { setVelocity(leftFrontWheel, -wheelSpeed); setVelocity(leftBackWheel, -wheelSpeed); setVelocity(rightFrontWheel, wheelSpeed); setVelocity(rightBackWheel, wheelSpeed); } void rotateRight() { setVelocity(leftFrontWheel, wheelSpeed); setVelocity(leftBackWheel, wheelSpeed); setVelocity(rightFrontWheel, -wheelSpeed); setVelocity(rightBackWheel, -wheelSpeed); } void moveRightForward() { setVelocity(leftFrontWheel, wheelSpeed); setVelocity(leftBackWheel, 0); setVelocity(rightFrontWheel, 0); setVelocity(rightBackWheel, wheelSpeed); } void moveRightBackward() { setVelocity(leftFrontWheel, 0); setVelocity(leftBackWheel, -wheelSpeed); setVelocity(rightFrontWheel, -wheelSpeed); setVelocity(rightBackWheel, 0); } void moveLeftForward() { setVelocity(leftFrontWheel, 0); setVelocity(leftBackWheel, wheelSpeed); setVelocity(rightFrontWheel, wheelSpeed); setVelocity(rightBackWheel, 0); } void moveLeftBackward() { setVelocity(leftFrontWheel, -wheelSpeed); setVelocity(leftBackWheel, 0); setVelocity(rightFrontWheel, 0); setVelocity(rightBackWheel, -wheelSpeed); } void stopMoving() { motorStop(leftFrontWheel); motorStop(leftBackWheel); motorStop(rightFrontWheel); motorStop(rightBackWheel); } void offMoving() { motorOff(leftFrontWheel); motorOff(leftBackWheel); motorOff(rightFrontWheel); motorOff(rightBackWheel); } void whellsRun() { motorRun(leftFrontWheel); motorRun(leftBackWheel); motorRun(rightFrontWheel); motorRun(rightBackWheel); } void setup() { // Serial.begin(115200); can.reset(); can.setBitrate(CAN_1000KBPS, MCP_8MHZ); can.setNormalMode(); // SPIClass mffVSPI = SPIClass(VSPI); // mffVSPI.begin(VSPI_CLOCK_PIN, VSPI_MISO_PIN, VSPI_MOSI_PIN); //pinMode(VSPI_MOSI_PIN, INPUT_PULLUP); //pinMode(VSPI_MISO_PIN, INPUT_PULLUP); // MCP_CAN mffCAN(VSPI_CS_MCP2515_PIN); //mffCAN.begin(mffVSPI, MCP_ANY, CAN_250KBPS, MCP_8MHZ); // mffCAN.setMode(MCP_NORMAL); Serial.println("Initialized"); whellsRun(); Serial.println("Initialized Successfully!Write to CAN"); } void loop() { Serial.println("Messages loop"); //moveLeftBackward(); setVelocity(rightFrontWheel, -wheelSpeed); setVelocity(rightBackWheel, -wheelSpeed); // stopMoving(); //offMoving(); Serial.println("Messages sent"); if (can.readMessage(&canMsg) == MCP2515::ERROR_OK) { readReply(); } Serial.println(); delay(100); } |
Автор: | Dimon456 [ Чт дек 09, 2021 18:49:34 ] |
Заголовок сообщения: | Re: Stm32 (nucleo-h743zi2) SPI, CAN |
anatoliydenisenko44 писал(а): по пинам SPI1 судя по тому что в примере вышеКод: #include <SPI.h> в вашем последнем коде не указан какой SPI используется, надо смотреть какой SPI по умолчанию прописан в фале SPI.h// MOSI MISO SCLK SPIClass SPI3(PC12, PC11, PC10); Я бы еще и этот файлик mcp2515.h перетряс, может там еще что указано. |
Автор: | do-vitas [ Ср дек 15, 2021 06:29:35 ] |
Заголовок сообщения: | Re: Stm32 (nucleo-h743zi2) SPI, CAN |
anatoliydenisenko44, а зачем вам mcp2515 у вас же can есть в контролере вам нужен приемопередатчик что-то типа TJA1040T. Я делал летом такой тока f373 все работало тока на LL. |
Автор: | optima [ Ср дек 15, 2021 14:55:40 ] |
Заголовок сообщения: | Re: Stm32 (nucleo-h743zi2) SPI, CAN |
Тоже не понимаю зачем 2515, при том что у вас на борту CAN FD а это существенный плюс по сравнению с обычным CAN. Поэтому и трансивер желателен на минимум 5 мбс |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |