Jump to content

    

Chip115

Участник
  • Content Count

    43
  • Joined

  • Last visited

Everything posted by Chip115


  1. STM32 + SPI EEPROM

    Всем привет! Пытаюсь написать алгоритм работы с SPI EEPROM, но из-за недостатка опыта сомневаюсь в правильности алгоритмов, потому требуется помощь. Контроллер STM32F103C8 (Reference manual) Память M95M01 (pdf) В общем, начал с низкоуровневых функций. Настройка SPI2, поднятие преываний на прием и окончание передачи. Как я понимаю передача и приём идет одновременно. В интернете полно примеров, но там используются всякие костыли типа while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE) == RESET); что, откровенно, вызывает кровь из глаз. Хотя мой быдлокодинг еще больше кровоточит. Ну да ладно, ближе к теме. В общем, функция для отправки байта typedef enum { SPI_EEPROM_STATUS_BSY, // Spi is busy SPI_EEPROM_STATUS_RDY } SpiEepromStatus; typedef struct { unsigned spiByteReseived: 1; unsigned spiByteTransmited: 1; } SpiState_TypeDef; SpiEepromStatus ui8EepromSendByte(uint8_t byte) { SpiEepromStatus Status = SPI_EEPROM_STATUS_BSY; if (SPI2->SR & SPI_SR_TXE) { SPI2->DR = byte; Status = SPI_EEPROM_STATUS_RDY; } else Status = SPI_EEPROM_STATUS_BSY; return Status; } Смысл такой, что если циклически вызывать ui8EepromSendByte и чекать что вернула функция, то можно рулить тем, что бы данные отправлялись тогда, когда предыдущие гарантированно уйдут. Такая конструкция приемлема или есть более интересная реализация? Функция прерывания void SPI2_IRQHandler (void) { if (SPI2->SR & SPI_SR_RXNE) { ui8ByteFromSpiEeprom = SPI2->DR; vSetSpiEepromFlag (&SpiState, SPI_BYTE_RECEIVED); } } vSetSpiEepromFlag взводит флаг в битовом поле (через битбанд). Таким образом происходит обмен мессаджами между функциями. Реализованное битовое поле typedef struct { unsigned spiByteReseived: 1; unsigned spiByteTransmited: 1; } SpiState_TypeDef; В целом, цель поднять FAT на SPI EEPROM и определить её как USB, потому в этом контексте, подобная реализация низкоуровневых функций норм? Или же мне отправляемые/принимаемые данные через кольцевой буфер гонять? Или исходящий поток нет смысла через кольцевой буфер гнать? Вообще, общение с EEPROM постраничное? т.е. прежде чем изменить байт (-ты), я должен прочитать всю страницу, изменить нужную информацию и записать вновь?
  2. Спасибо за ответ! Проект был создан не мной, но мне с ним работать. Перенес содержимое папки Windows/Fonts на другую машину (где не открывалось). Все равно ошибка. Откуда альтиум шрифты подтягивает? Что еще может вызвать подобную ошибку?
  3. Всем привет! Столкнулся с проблемой при работе с AD 16-17. При попытке открыть схему вылетает ошибка FontStyleNotFound. PCB открывается нормально. Замечено, что схема частично на листе прогружается, но при любой манипуляции с ней вылетает ошибка. Можно ли как-нибудь сбросить шрифты на стандартные в схеме? Открыл схему на другом компе. Как можно посмотреть все используемые шрифты в проекте? Я только не давно с альтиумом начал работать. Не совсем хорошо ориентируюсь в этой среде.
  4. Всем привет! Необходимо опросить датчик по SSI. Хочу заюзать SPI. По SSI необходимо принять 13 бит. Как мне сформировать 13 инмульсов клока? Камень TMS320F28335. Читаю TMS320x2833x, 2823x Serial Peripheral. Там сказано что в регистре SPICCR есть поля CHAR0 - CHAR3, которые отвечают за длину бит в посылке. Правитльно ли я понимаю, что если я запишу 13 в это поле, то я должен получить 13 клоков с вывода SPI CLK. К сожалению нет возможности предоставить код ((( На текущий момент при передаче чего-либо у меня формируется 16 клоков и значение записанное в CHARx не влияет на клоки.
  5. Всем привет! Столкнулся с акселерометром FXOS8700. Управляется по I2C. Адрес устройства 0х1E. Контроллер STM32L476. Проблема с чтением регистра WHOAMI. (ID устройства). Точнее, в целом проблема чтения данных с устройства. Набросал функцию. В качестве аргумента передаю адрес регистра который намерен считать. uint8_t FXOS8700_ReadByte (uint8_t ui8reg) { uint8_t ui8byteFromReg; HAL_I2C_Master_Transmit (&hi2c3, (0x1E<<1), &ui8reg, 1, 200); HAL_I2C_Master_Receive (&hi2c3, ((0x1E<<1)|0x01), &ui8byteFromReg,1, 200); return ui8byteFromReg; } Как я понял (до этого делов с I2C не имел), для чтения должны придерживаться диаграммы single byte read. вот вырезка из доки. Вот тут непонятки. Адрес имеет длину 7 бит. Я так понял, просто так мы его передать не можем? Надо его сдвинуть влево на бит и тогда подсунуть в функцию HAL_I2C_Master_Transmit . Сначала мы передаем устройству адрес+W, получаем от устройсва AK, затем передаем адрес регистра который будем читать (в нашем случае это 0х0D). После этого опять ожидаем AK. За эту часть отвечает HAL_I2C_Master_Transmit. Затем, (не понял как сгенерить SR) отсылаем адрес + R И после этого ожидаем AK и содержимое регистра 0х0D устройства. Но вот что-то на этом этапе линия данных ложится в нуль, хотя ID != 0. Вот сфотал (по другому не получается) экран с данным от лог. анализатора. При таком подходе, в конце работы ф-ции transmit передается STOP. Работа функции transmit Receive Правильно ли я понял принцип обмена данными с устройством, которое сидит на I2C шине и в чем ошибка?
  6. Доброго времени суток. Возникла проблема. OrCAD Capture выдет ошибку при попытки создать нетлист. #1 WARNING(SPMHNI-192): Device/Symbol check warning detected. [help] WARNING(SPMHNI-194): Symbol 'IN12' for device 'IN-12B_IN12_IN-12B' not found in PSMPATH or must be "dbdoctor"ed. Database has a non-recoverable corruption. Contact Cadence customer support. Что это значит? Сделал футпринт для ИН-12 и хочу его протестить. Набросал простейшую схему. Где-то в начале темы у кого-то была подобная ошибка, но как решили проблему - не нашел
  7. Всем привет! Возникла следующая проблема. После изменения схемы остались старые, ненужные связи элементов проводниками. Можно ли как нибудь настроить программу что бы эти дорожки хотя бы маркировались как ошибочные? Использую OrCAD 16.6.
  8. А нет другого способа? Мол, поставил символ "земля" и на всех листах земля объединена. С VCC это же работает без коннектора.
  9. Всем привет! При разводке платы столкнулся с тем, что цепь GND на плате не объединяется с "земляным" полигоном. Схема занимает три листа. Открыв схему обнаружил что цепи GND в пределах одного листа имеют имя отличное от GND (а точнее GND_16776976). При попытке цепи придать нужное имя, оркад ругается Net Name GND has been applied to more than one schematic nets. Capture will retain the name on one and rename others. Если захожу в свойства цепи и пытаюсь заменить имя цепи на GND, то система вновь присваивает этой цепи адский номер Что нужно сделать, что бы цепи GND объединились? Может проблема с символом "земля", который я создал? По сути нет межстраничного объединения земли. Есть идея соединитель эти цепи через offpage connector, но это как то совсем через колено будет.
  10. Всем привет! Помогите пожалуйста решить проблему. Не могу понять, как в пад-дезайнере сделать срезанный угол у прямоугольника? На сколько я понимаю, надо самому создавать shape, но как это сделать?
  11. Всем привет! Столкнулся с проблемой. Не могу понять, где настраивается расстояние от края платы до меди? Надеюсь я правильно понял назначение ораньжевого прямоугольника, создаваемого при использовании board outline . Скриншот в приложении. И где настраиваются нормы проектирования? И почему не отображаются линии связи цепей питания после добавления компонентов на пп?
  12. Привет! Хочу сделать USB CDC USB2COM. Нашел исходник, реализующий эхо, но я новичок в этой ОСРВ, потому не понимаю многих моментов. При ковырянии в отладчике выяснилось что застревает система в функции IntDefaultHandler. Как выяснить, что вызывает прерывание? В приложении мой стартап. и исходник программы. startup.rar USB_CDC_Echo.rar
  13. Stellaris LM3S9B96, CAN

    Так. Вроде бы раскурил пример для платы EK-LM3S8962. Вырезал то, что надо. Не понимаю, почему не работает? Что я упустил? И до удаления ненужных функций не работала (( Как я понял, пример был заточен на получение данных по CAN, потом данные изменялись и отправлялись в ответ. И так снова. Как вообще работает машина? Посылка должна уйти при вызове функции CANMessageSet ? Не надо там как то пинать еще? Я не стал подключать прерывания. Может это как то повлияло? вот код в приложении CAN.rar
  14. Stellaris LM3S9B96, CAN

    Вот тут на основании примера из IAR что то написал. Не работает (( Не могу понять что не так (( Помогите разобраться )) //***************************************************************************** // // gpio.c - API for GPIO ports // // Copyright © 2005-2012 Texas Instruments Incorporated. All rights reserved. // Software License Agreement // // Texas Instruments (TI) is supplying this software for use solely and // exclusively on TI's microcontroller products. The software is owned by // TI and/or its suppliers, and is protected under applicable copyright // laws. You may not combine this software with "viral" open-source // software in order to form a larger program. // // THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. // NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT // NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY // CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL // DAMAGES, FOR ANY REASON WHATSOEVER. // // This is part of revision 8555 of the Stellaris Peripheral Driver Library. // //***************************************************************************** //***************************************************************************** // //! \addtogroup gpio_api //! @{ // //***************************************************************************** #include "inc/hw_gpio.h" #include "inc/hw_ints.h" #include "inc/hw_memmap.h" #include "inc/hw_sysctl.h" #include "inc/hw_types.h" #include "driverlib/debug.h" #include "driverlib/gpio.h" #include "driverlib/interrupt.h" #include "driverlib/sysctl.h" #include "driverlib/uart.h" #include <stdio.h> #include "utils/uartstdio.h" #include "inc/hw_can.h" #include "driverlib/can.h" #define CAN_IDLE 0 #define CAN_SENDING 1 #define CAN_WAIT_RX 2 #define CAN_PROCESS 3 // // Size of the FIFOs allocated to the CAN controller. // #define CAN_FIFO_SIZE 32 // // Message object used by the transmit message FIFO. // #define TRANSMIT_MESSAGE_ID 11 // // Message object used by the receive message FIFO. // #define RECEIVE_MESSAGE_ID 8 // // The number of FIFO transfers that cause a toggle of the LED. // #define TOGGLE_RATE 100 // // The CAN bit rate. // #define CAN_BITRATE 250000 #ifdef DEBUG void __error__(char *pcFilename, unsigned long ulLine) { } #endif // // This structure holds all of the state information for the CAN transfers. // struct { // // This holds the information for the data receive message object that is // used to receive data for each CAN controller. // tCANMsgObject MsgObjectRx; // // This holds the information for the data send message object that is used // to send data for each CAN controller. // tCANMsgObject MsgObjectTx; // // Receive buffer. // unsigned char pucBufferRx[CAN_FIFO_SIZE]; // // Transmit buffer. // unsigned char pucBufferTx[CAN_FIFO_SIZE]; // // Bytes remaining to be received. // unsigned long ulBytesRemaining; // // Bytes transmitted. // unsigned long ulBytesTransmitted; // // The current state of the CAN controller. // /* enum { CAN_IDLE, CAN_SENDING, CAN_WAIT_RX, CAN_PROCESS, } */ char eState; } g_sCAN; //***************************************************************************** // // This function configures the transmit FIFO and copies data into the FIFO. // //***************************************************************************** int CANTransmitFIFO(unsigned char *pucData, unsigned long ulSize) { int iIdx; // // This is the message object used to send button updates. This message // object will not be "set" right now as that would trigger a transmission. // g_sCAN.MsgObjectTx.ulMsgID = TRANSMIT_MESSAGE_ID; g_sCAN.MsgObjectTx.ulMsgIDMask = 0; // // This enables interrupts for transmitted messages. // g_sCAN.MsgObjectTx.ulFlags = MSG_OBJ_TX_INT_ENABLE; // // Return the maximum possible number of bytes that can be sent in a single // FIFO. // if(ulSize > CAN_FIFO_SIZE) { return(CAN_FIFO_SIZE); } // // Loop through all eight message objects that are part of the transmit // FIFO. // for(iIdx = 0; iIdx < 8; iIdx++) { // // If there are more than eight bytes remaining then use a full message // to transfer these 8 bytes. // if(ulSize > 8) { // // Set the length of the message, which can only be eight bytes // in this case as it is all that can be sent with a single message // object. // g_sCAN.MsgObjectTx.ulMsgLen = 8; g_sCAN.MsgObjectTx.pucMsgData = &pucData[iIdx * 8]; // // Set the MSG_OBJ_FIFO to indicate that this is not the last // data in a chain of FIFO entries. // g_sCAN.MsgObjectTx.ulFlags |= MSG_OBJ_FIFO; // // There are now eight less bytes to transmit. // ulSize -= 8; // // Write out this message object. // CANMessageSet(CAN0_BASE, iIdx + 1, &g_sCAN.MsgObjectTx, MSG_OBJ_TYPE_TX); } // // If there are less than or exactly eight bytes remaining then use a // message object to transfer these 8 bytes and do not set the // MSG_OBJ_FIFO flag to indicate that this is the last of the entries // in this FIFO. // else { // // Set the length to the remaining bytes and transmit the data. // g_sCAN.MsgObjectTx.ulMsgLen = ulSize; g_sCAN.MsgObjectTx.pucMsgData = &pucData[iIdx * 8]; // // Write out this message object. // CANMessageSet(CAN0_BASE, iIdx + 1, &g_sCAN.MsgObjectTx, MSG_OBJ_TYPE_TX); } } return(0); } //***************************************************************************** // // Send a string to the UART. // //***************************************************************************** int putchar (int iCh) { UARTCharPut (UART0_BASE, iCh); return (iCh); } void UARTSend(const unsigned char *pucBuffer, unsigned long ulCount) { // // Loop while there are more characters to send. // while(ulCount--) { // // Write the next character to the UART. // UARTCharPutNonBlocking(UART0_BASE, *pucBuffer++); } } void main () { int iIdx; unsigned long Clk; // установить часту на 80 МГц SysCtlClockSet(SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ |SYSCTL_OSC_MAIN); Clk=SysCtlClockGet(); // // Configure CAN 0 Pins. // SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD); GPIOPinTypeCAN(GPIO_PORTD_BASE, GPIO_PIN_0 | GPIO_PIN_1); // // Enable the CAN controller. // SysCtlPeripheralEnable(SYSCTL_PERIPH_CAN0); // // Reset the state of all the message object and the state of the CAN // module to a known state. // CANInit(CAN0_BASE); // // Configure the bit rate for the CAN device, the clock rate to the CAN // controller is fixed at 50MHz for this class of device and the bit rate is // set to CAN_BITRATE. // CANBitRateSet(CAN0_BASE, 50000000, CAN_BITRATE); // // Take the CAN0 device out of INIT state. // CANEnable(CAN0_BASE); // // Set the initial state to idle. // g_sCAN.eState = CAN_IDLE; // // Initialize the CAN FIFO buffer. // for(iIdx = 0; iIdx < CAN_FIFO_SIZE; iIdx++) { g_sCAN.pucBufferTx[iIdx] = iIdx + 0x1; } // // Reset the buffer pointer. // g_sCAN.MsgObjectRx.pucMsgData = g_sCAN.pucBufferRx; // // Set the total number of bytes expected. // g_sCAN.ulBytesRemaining = CAN_FIFO_SIZE; SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); //GPIOPinConfigure(GPIO_PD2_U1RX); //GPIOPinConfigure(GPIO_PD3_U1TX); // Установить GPIO A0 и A1 как выводы UART GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1); UARTStdioInit(0); UARTConfigSetExpClk(UART0_BASE, SysCtlClockGet(), 9600, (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE)); /*while (1) { for (int counter=0;counter<5000000; counter++){} //UARTprintf ( "UARTprintf \n" ); printf ( "Hello\n" ); } }*/ while(1) { switch(g_sCAN.eState) { case CAN_IDLE: { // // Switch to sending state. // g_sCAN.eState = CAN_SENDING; // // Initialize the transmit count to zero. // g_sCAN.ulBytesTransmitted = 0; // // Schedule all of the CAN transmissions. // CANTransmitFIFO(g_sCAN.pucBufferTx, CAN_FIFO_SIZE); break; } case CAN_SENDING: { // // Wait for all bytes to go out. // if(g_sCAN.ulBytesTransmitted == CAN_FIFO_SIZE) { // // Switch to wait for RX state. // g_sCAN.eState = CAN_WAIT_RX; } break; } case CAN_WAIT_RX: { // // Wait for all new data to be received. // if(g_sCAN.ulBytesRemaining == 0) { // // Switch to wait for Process data state. // g_sCAN.eState = CAN_PROCESS; // // Reset the buffer pointer. // g_sCAN.MsgObjectRx.pucMsgData = g_sCAN.pucBufferRx; // // Reset the number of bytes expected. // g_sCAN.ulBytesRemaining = CAN_FIFO_SIZE; } break; } case CAN_PROCESS: { // // Compare the received data to the data that was sent out. // for(iIdx = 0; iIdx < CAN_FIFO_SIZE; iIdx++) { if(g_sCAN.pucBufferTx[iIdx] != g_sCAN.pucBufferRx[iIdx]) { // // Detected an Error Condition. // UARTprintf ( "Error \n" ); break; } } // // Change the CAN FIFO data. // for(iIdx = 0; iIdx < CAN_FIFO_SIZE; iIdx++) { // // Increment the data to change it. // g_sCAN.pucBufferTx[iIdx] += 0xB; } // // Return to the idle state. // g_sCAN.eState = CAN_IDLE; break; } default: { break; } } } }
  15. Stellaris LM3S9B96, CAN

    Всем привет! Пытаюсь заставить работать CAN 0 , но пока все четно (( Да и не совсем пока я разобрался с stellarisware. помогите осилить ) Как я понимаю, надо юзасть can.c и can.h из driverlib. Вот такие ф-ции там есть //***************************************************************************** extern void CANBitTimingGet(unsigned long ulBase, tCANBitClkParms *pClkParms); extern void CANBitTimingSet(unsigned long ulBase, tCANBitClkParms *pClkParms); extern unsigned long CANBitRateSet(unsigned long ulBase, unsigned long ulSourceClock, unsigned long ulBitRate); extern void CANDisable(unsigned long ulBase); extern void CANEnable(unsigned long ulBase); extern tBoolean CANErrCntrGet(unsigned long ulBase, unsigned long *pulRxCount, unsigned long *pulTxCount); extern void CANInit(unsigned long ulBase); extern void CANIntClear(unsigned long ulBase, unsigned long ulIntClr); extern void CANIntDisable(unsigned long ulBase, unsigned long ulIntFlags); extern void CANIntEnable(unsigned long ulBase, unsigned long ulIntFlags); extern void CANIntRegister(unsigned long ulBase, void (*pfnHandler)(void)); extern unsigned long CANIntStatus(unsigned long ulBase, tCANIntStsReg eIntStsReg); extern void CANIntUnregister(unsigned long ulBase); extern void CANMessageClear(unsigned long ulBase, unsigned long ulObjID); extern void CANMessageGet(unsigned long ulBase, unsigned long ulObjID, tCANMsgObject *pMsgObject, tBoolean bClrPendingInt); extern void CANMessageSet(unsigned long ulBase, unsigned long ulObjID, tCANMsgObject *pMsgObject, tMsgObjType eMsgType); extern tBoolean CANRetryGet(unsigned long ulBase); extern void CANRetrySet(unsigned long ulBase, tBoolean bAutoRetry); extern unsigned long CANStatusGet(unsigned long ulBase, tCANStsReg eStatusReg); Хочу просто передать сообщение не важнно какое и не важно с каким идентификатором. Просто для начала хочу понять как эта штука работает. А саму передачу буду наблюдать по осциллографу. Я так думаю, что вначале юзаются эти функции extern void CANEnable(unsigned long ulBase); extern void CANInit(unsigned long ulBase); А как быть с передачей сообщения? как понимаю, надо юзать эту функцию CANMessageSet, но что то до меня туго доходит :( Помогите разобраться. Может у кого есть пример для этого МК?
  16. Спасибо! Завтра попробую! Это, как я понимаю, надо прописывать в debug ?
  17. Stellaris , CAN

    всем привет! У когонить есть пример реализации CAN для LM3S9B96 или подобного? Что то в примерах IAR не нашел (((
  18. UART1 LM3S9B96

    Доброго времени суток! Не могу понять, где ошибка. Пытаюсь отправить сообщение по УАПП1. Тот же код для УАПП0 работает (с заменой порта D на порт A и пины другие. И UART0 вместо UART1 в настройках) //***************************************************************************** // // Send a string to the UART. // //***************************************************************************** int putchar (int iCh) { UARTCharPut (UART1_BASE, iCh); return (iCh); } void UARTSend(const unsigned char *pucBuffer, unsigned long ulCount) { // // Loop while there are more characters to send. // while(ulCount--) { // // Write the next character to the UART. // UARTCharPutNonBlocking(UART1_BASE, *pucBuffer++); } } void main () { unsigned long Clk; // генератор на 80 МГц SysCtlClockSet(SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ |SYSCTL_OSC_MAIN); Clk=SysCtlClockGet(); SysCtlPeripheralEnable(SYSCTL_PERIPH_UART1); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD); // GPIO D2 и D3 UART GPIOPinTypeUART(GPIO_PORTD_BASE, GPIO_PIN_2 | GPIO_PIN_3); UARTStdioInit(1); UARTConfigSetExpClk(UART1_BASE, SysCtlClockGet(), 9600, (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE)); while (1) { for (int counter=0;counter<5000000; counter++){} UARTprintf ( "UARTprintf \n" ); printf ( "Hello World " ); } }
  19. всем привет! Тоже столкнулся с тем, что бы IAR ARM прикрутить в SlickEdit. Вроде бы сделал все, как тут сказано, но при билде дает вот что VSLICKERRORPATH="D:\TEMP" D:\TEMP>"C:\PROGRA~1\SLICKE~2.0\win\vsbuild" -beep "D:\TEMP\My_blinky.vpw" "D:\TEMP\My_blinky.vpj" -t build -signal 60760 ---------- Build Project: 'My_blinky.vpj' - 'Debug' ---------- VSLICKERRORPATH="D:\TEMP" Compile/Link command change detected. Some files may be rebuilt. My_Blinky.c vsbuild: File not found (C:\Program Files\IAR Systems\Embedded Workbench 6.0\common\bin\IarBuild.exe D:\TEMP\My_blinky.ewp -make Debug -log all) startup.c vsbuild: File not found (C:\Program Files\IAR Systems\Embedded Workbench 6.0\common\bin\IarBuild.exe D:\TEMP\My_blinky.ewp -make Debug -log all) *** Errors occurred during this build *** Ниже скрины настроек что я сделал. И на первом скрине инфа после попытки компиляции . Что то пишет, а что хочет- не пойму Я не нашел строчки Command Line как на картинке потому создал кнопку My_build. Это верное решение? Вот аналогичное окно в версии 15 Так. Что то как то ткнул и вроде бы что то заработало (( пишет вот что Microsoft Windows [Version 6.1.7600] © Êîðïîðàöèÿ Ìàéêðîñîôò (Microsoft Corp.), 2009. Âñå ïðàâà çàùèùåíû. D:\TEMP\My_Blinky>echo VSLICKERRORPATH="D:\TEMP\My_Blinky" VSLICKERRORPATH="D:\TEMP\My_Blinky" D:\TEMP\My_Blinky>"C:\Program Files\SlickEditV16.0.0\win\vsbuild" -signal 62734 -command "C:\Program Files\IAR Systems\Embedded Workbench 6.0\common\bin\IarBuild.exe" "D:\TEMP\My_Blinky\My_Blinky.ewp" -build Debug VSLICKERRORPATH="D:\TEMP\My_Blinky" "C:\Program Files\IAR Systems\Embedded Workbench 6.0\common\bin\IarBuild.exe" D:\TEMP\My_Blinky\My_Blinky.ewp -build Debug IAR Command Line Build Utility V6.3.12.0 Copyright 2002-2011 IAR Systems AB. Building configuration: My_Blinky - Debug Updating build tree... 3 file(s) deleted. Updating build tree... My_Blinky.c startup.c Linking Total number of errors: 0 Total number of warnings: 0 D:\TEMP\My_Blinky> А можно из под этой оболочки прошить мк? Или только юзая IAR? К проекту я подключил дви сишника и ашник. А файл IAR надо подрубать? простите за такие вопросы... учусь . Впервые столкнулся с подобным
  20. Всем привет! Встречал подобную тему тут, но там для AVR и сильно мне не помогла (( Хочу заюзать эту штуку. Говорят удобно, но пока одни проблемы (( Не могу заставить работать. В инете нашел описание как делать это тут, но версии малость разные и есть некоторые различия. Кто нить пользовался этой связкой? Поделитесь опытом, как настроить это? Пишу под ARM. Ниже скрины настроек что я сделал. И на первом скрине инфа после попытки компиляции . Что то пишет, а что хочет- не пойму Я не нашел строчки Command Line как на картинке потому создал кнопку My_build. Это верное решение? Вот аналогичное окно в версии 15
  21. Всем привет! Хочу использовать printf для отправления сообщений через UART . Тут почитал подобные сообщения. Получается надо создать свою ф-цию putchar. :( Может у кого нить есть исходник своей функции под этот контроллер или подобный? Хочу использовать либо готовый, или же написать свою функцию по образу и подобию :(
  22. Ну что вы такое говорите )) МЫ же в России... кто тут когда что либо покупал ) Я в целях образовательных интересуюсь этой штукой. Я тут пошарил и обнаружил что почему то нет примеров по CANOpen... везде сухая документация. Может у кого нить есть пример ... скажем мигания светодиода... тока управление через CAN. ? мне нужен какой нить простенький проект что бы поковыряться в нем. может станет более понятно
  23. Всем привет! Читаю доку на CANOpen (далее CO) и что то плохо пока "въезжаю" в тему. В общем интересует с чего начать то? Как я понял имеются уже готовые решения для разного рода задач... В целом имеется установка. На определенное время она запускается и что то делает... в целом идет замер тока,напряжения. в ней CAN интерфейс... что,когда и как она посылает известно. Хочу сделать девайс, который буде связан с установкой по CAN и соответственно управлять ей. Мне бы понять общий принцип... хотя бы на основе сбора данных о U и I. Как я понял надо создавать словарь объектов, где будут перечислены все параметры (в моем случа ток и напруга). Словарь объектов создается по средствам SDO. Так? или я не с того начал? Как грамотно подойти к этому вопросу ? Чтение доки сильно не помогает... так как не вижу картины в целом как эта штука работает (CO).