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

ave!

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

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

  • Посещение

Весь контент ave!


  1. А вы можете поделиться тем, що у вас получилось?
  2. Проблема с условием

    Код рабочий, на AVR компилируется без ошибок и предупреждений. Предупреждения только при переносе на STM. На самом деле это с моей стороны извращение пытаться понять этот код. Стиль написания самой функции поиска следующего хода для меня не понятна: short D(q,l,e,E,z,n) short q,l,e; unsigned char E,z,n; { //... } Я подозреваю, что это тоже самое что: short D(short q, short l, short e, unsigned char E, unsigned char z, unsigned char n) { //... } Под AVR компилятор пропустил и первую запись, а вот под STM не прошло.
  3. Проблема с условием

    Приоритет операций C++ - это я себе в тему на заметку. jcxz, может вы поможете разобраться с остальными местами по списку.
  4. Проблема с условием

    Сергей Борщ, я скопировал все 7 предупреждений. Может у вас будет настроение расставить все скобки. Буду вам очень благодарен. Чувствую, что даже после изучения приоритетов я все-равно где-то, что-то не так сделаю. Программа скомпилируется и даже работать будет, но это шахматный алгоритм, там можно не понять что что-то не так работает. (1) while (d++<n||d<3||z&K==I&&(N<T&d<98||(K=X,L=Y&~M,d=3))) (2) while (r=p>2&r<0?-r:-o[++j]) (3) if (t&k|p<3&!(y-x&7)-!t) (4) v-=p-4|R>29?0:20; (5) Y=y|S&F; (6) if (x+r-y|u&32|p>2&(p-4|j-7||b[G=x+3^r>>1&7]-k-6||b[G^1]|b[G^2])) (7) m=m+I|P==I?m:0; Исправление готово: m = ((m+I)|(P==I)) ? m : 0; Мой случай как раз яркий пример для статьи на хабре: Как вы пишете условия в СИ-подобных языках? Со скобками в условиях или без?
  5. Проблема с условием

    Это не секрет, это шахматная программа micro-Max. Весь код помещается на одном листе А4, притом, что программа знает даже такое правило, как "взятие пешки на проходе". Мне этот алгоритм очень понравился, я когда-то с друзьями в турнир играл, четырех обыграл, а эта програмка меня взувает (сделал шахматный калькулятор на ATmega48). Тут верно заметили, что код писал математик. Спасибо за советы.
  6. Проблема с условием

    Добрый день! Я переношу чужую программу с AVR на STM32 (под HAL Keil). m = m+I|P == I ? m : 0; Эта строка выдает предупреждение: "| имеет более низкий приоритет, чем ==; == будет оцениваться сначала" Когда пишу m = (m+I|P) == I ? m : 0; предупреждение исчезает, но я не знаю можно ли так писать, не нарушит ли эта запись условие. Таких предупреждений много и есть более сложные выражения. if (x+r-y|u&32|p > 2&(p-4|j-7 || b[G=x+3^r>>1&7]-k-6 || b[G^1]|b[G^2])) t += p<5; else F = y; Warning: '&' within (внутри) '|' Warning: & has lower precedence than >; > will be evaluated first Warning: '&' within (внутри) '|' Подскажите ссылку где можно поучится этим условиям в контексте моей проблемы.
  7. Прочитал всю ветку, пробовал все варианты под CooCox и Keil, SPL и HAL - у меня не работает на STM32F030K6. На STM32F103С8 у меня работает и SPL и HAL - https://zxlogin.com/stm/stm32f103-rc522+hal.zip Поделитесь рабочим кодом под STM32F030 для RC522.
  8. Добрий день! Помогите пожалуйста мне установить связь с AD7195. Никак не удается ID прочитать. У вас сигнал Sync (25 нога) висит в воздухе или подключен к контроллеру? Нудно ли его дергать? Буду вам благодарен если поделитесь куском кода инициализации для CY7C68013. Сам я пытаюсь подружить с STM.
  9. Offline распознавание речи (команд) Voice Recognition Robotic Car (Google перевод) Кому-то под силу этот проект перевести с AVR MEGA32 на STM32F030 с предложенными улучшениями?
  10. controller_m30, у вас с камерой в jpeg что-то получилось?
  11. Установил тот же драйвер на другой компьютер с Windows XP. Проблема та же самая. Этот драйвер не подходит к той прошивке. Кто-нибудь имеет правильный драйвер? Кто-нибудь здесь запустил такой LogicDiscovery?
  12. LogicDiscovery — простой логический анализатор на Stm32F4Discovery. Скачал прошивку, прошил. Скачал драйвер, установил на Windows 7. Прошивка драйвера не видит. Кто-нибудь знает как это лечится? Может, кто подскажет, где может быть проблема.
  13. Заработало. Еще одну ошибку заметил - в одной из команд "АТ" было набрано русскими буквами. На счет двойных кавычек, рабочий пример: send_str("AT+CPBW=2,\"+380970000000\",145,\"SOS\"");
  14. Кажется я понял... я читал ваши посты, вы об этом уже писали. Сейчас буду допиливать в этом направлении. Спасибо вам за ответ.
  15. Пытаюсь разными способами через модуль SIM800 командой АТ+CPBW записать номер в 1 ячейку на SIM-карту и, переставив симку в телефон, увидеть этот номер в телефонной книге. Не получается. Другие команды работают, дозвон по номеру происходит. Что я делаю не так? Может, кто подскажет. Думаю, проблема в передаче кавычек. Среда CooCox под STM32. // send_str("АТ+CPBW=1,«+380971112222»,129,«SOS»"); // send_str("АТ+CPBW=1,\"+380971112222\",145,\"SOS\""); send_str2("АТ+CPBW=1,"); send_to_uart(34); // " - 34 (0x22) send_str2("+380971112222"); send_to_uart(34); send_str2(",145,"); send_to_uart(34); send_str2("SOS"); send_to_uart(34); send_to_uart('\r'); send_to_uart('\n'); // Функция отправляет строку в USART void send_str(char * string) { u8 i=0; while (string[i]) { send_to_uart(string[i]); i++; } send_to_uart('\r'); send_to_uart('\n'); } // Функция отправляет строку в USART без '\r\n' (незаконченная строка) void send_str2(char * string) { u8 i=0; while (string[i]) { send_to_uart(string[i]); i++; } }
  16. Soft UART

    Продолжение статьи "SOFT UART X3". Код из статьи иногда пропускал ошибки на длинных посылках. Здесь рабочий, немного подправленный код для STM32F103C8T6 для среды CooCox. Для STM32F030F4P6 SOFT UART незаменимая штука! Там всего 1 UART. Тест «BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBAB» — LED ON на букву "А" в посылке. // SOFT UART - STM32F103C8T6 - CooCox (1.05.2015, zz555) // http://we.easyelectronics.ru/STM32/vcp-soft_uart_x3-modifikaciya-stm32vldiscovery.html // Для STM32F030F4P6 незаменимая штука! Там всего 1 UART. // Тест «BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBAB» — LED ON на букву "А" в посылке // 10 bit protocol: 1-start bit, 8-bit data, 1-stop bit (bps = timer_irq/3) // // Recive bytes: // 1 - waiting flag_rx_rdy = 1 // 2 - read rx_buf[] // 3 - flag_rx_rdy = 0, rx_byte_no = 0 // // Transmit bytes: // 1 - copy bytes to tx_buf[] // 2 - run tx_uart(number of bytes in tx_buf); // // PA1 (IN) RX // PC13 (OUT) LED #include "stm32f10x.h" void tx_uart(uint8_t bytes); #define RX (GPIOA->IDR & GPIO_IDR_IDR1)==GPIO_IDR_IDR1 // PA1 IN RX #define TX0 GPIOA->BSRR = GPIO_BSRR_BR0 // PA0 OUT TX OFF #define TX1 GPIOA->BSRR = GPIO_BSRR_BS0 // PA0 OUT TX ON #define PC13_0 GPIOC->BRR |= GPIO_ODR_ODR13 // PC13 OUT LED OFF #define PC13_1 GPIOC->BSRR |= GPIO_ODR_ODR13 // PC13 OUT LED ON #define PC13_N GPIOC->ODR^=GPIO_ODR_ODR13 // PC13 OUT LED INVERT #define BUF_SIZE 256 uint8_t rx_buf[BUF_SIZE]; uint8_t tx_buf[BUF_SIZE]; uint8_t rx_byte; uint8_t tx_byte; uint8_t rx_byte_no; uint8_t state_rx; uint8_t state_tx; uint8_t rx_counter; uint8_t tx_counter; uint8_t rx_counter_equ; uint8_t rx_mask; uint8_t tx_mask; uint8_t bit_no_rx; uint8_t bit_no_tx; uint8_t flag_rx_rdy; uint8_t flag_tx_rdy; uint8_t err; uint8_t i; uint8_t k; uint32_t TimingDelay; void TIM2_IRQHandler(void) { // RX if (rx_byte_no>0) { k++; if (k>30) {k=0; flag_rx_rdy=1;} } if (flag_rx_rdy==0) { if (state_rx>1) {k=0; rx_counter++;} else rx_counter=1; if (rx_counter==rx_counter_equ) { rx_counter=0; switch (state_rx) { case 1: // start bit { if (RX) {} else { // PA1 - RX rx_byte=0; bit_no_rx=1; state_rx=2; rx_counter_equ=4; } break; } case 2: // data bits { if (RX) rx_mask=1; else rx_mask=0; // PA1 - RX rx_byte >>= 1; rx_mask <<= 7; rx_byte |= rx_mask; bit_no_rx++; if (bit_no_rx==9) state_rx=3; rx_counter_equ=3; break; } case 3: // stop bit { if (RX) { // PA1 - RX rx_buf[rx_byte_no]=rx_byte; rx_byte_no++; if (rx_byte_no==BUF_SIZE-1) rx_byte_no=0; } else err=1; state_rx=1; rx_counter_equ=1; break; } } } } if (flag_tx_rdy==1) { // TX tx_counter++; if (tx_counter==3) { tx_counter=0; switch (state_tx) { case 1: // start bit { TX0; bit_no_tx=1; state_tx=2; break; } case 2: // data bits { tx_mask=tx_byte & 1; tx_byte >>= 1; if (tx_mask==0) TX0; else TX1; bit_no_tx++; if (bit_no_tx>8) state_tx=3; break; } case 3: // stop bit { TX1; flag_tx_rdy=0; break; } } } } TIM2->SR &= ~TIM_SR_UIF; } // Функция временной задержки в милисекундах void Delay_ms(uint32_t nTime) { TimingDelay = nTime*2400; while (TimingDelay != 0) TimingDelay--; } void flash (void) { err=0; for(i=0; i<10; i++) { PC13_0; Delay_ms(10); PC13_1; Delay_ms(10); } } void tx_uart(uint8_t bytes) { uint8_t i; tx_counter=0; for (i=0; i<bytes; i++) { while (flag_tx_rdy==1) {} tx_byte=tx_buf[i]; state_tx=1; flag_tx_rdy=1; } } //================================================================================ void Init_STM() { RCC->APB2ENR |= (RCC_APB2ENR_IOPAEN | RCC_APB2ENR_IOPCEN); GPIOA->CRL &= ~(GPIO_CRL_MODE0 | GPIO_CRL_CNF0 | GPIO_CRL_MODE1 | GPIO_CRL_CNF1); GPIOA->CRL |= (GPIO_CRL_MODE0_0 | GPIO_CRL_CNF1_1); // PA0 (OUT) TX, PA1 (IN) RX GPIOA->BSRR = GPIO_BSRR_BS1; GPIOC->CRH |= GPIO_CRH_MODE13; // PC13 (OUT) LED // Инициализация таймера TIM2 RCC->CFGR |= RCC_CFGR_HPRE_DIV2; // sys_clk/2 (36/2=18 MHz) RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; // Разрешаем тактирование TIM2 TIM2->DIER |= TIM_DIER_UIE; // Update interrupt enable TIM2->PSC = 625-1; // Предделитель частоты перед таймером (при 0 максимальная частота) (18000/625=28.8 KHz) TIM2->ARR = 1; // До скольки считает таймер (28.8/3=9600 Hz) TIM2->CR1 |= (TIM_CR1_CEN | TIM_CR1_ARPE); // Запускаем таймер NVIC_EnableIRQ (TIM2_IRQn); // Разрешаем прерывания TIM2 } //================================================================================ int main (void) { Init_STM(); // Init_UART state_rx=1; rx_counter_equ=1; rx_byte_no=0; rx_byte_no=0; flag_rx_rdy=0; flag_tx_rdy=0; TX1; PC13_0; Delay_ms(10); // Пауза 0,01 с PC13_1; while (1) { if (flag_rx_rdy==1) { if (err==1) flash(); for(i=0; i<rx_byte_no; i++) { tx_buf[i]=rx_buf[i]; if (rx_buf[i]==65) PC13_0; // "A" - код 65 } tx_uart(rx_byte_no); Delay_ms(10); PC13_1; rx_byte_no=0; flag_rx_rdy=0; } } }
  17. Нашел неизвестные для меня выражения в исходнике под Mega8, хочу перевести программу под STM32. #define a _.a - что это значит? Что такое #define я знаю, а вот "_." не знаю. Через поиск в интернете не могу найти. Еще не знаю: *J=_; ... _=*J; Надеюсь, кто-то знает и поможет мне.
  18. Просветите, пожалуйста, что значит обновиться? Купить новый модуль или каким-то образом есть возможность менять прошивку? Если такая возможность есть, то каким способом?
  19. USB

    while (!usbInterruptIsReady()); // ждем прихода прерывания usbSetInterrupt (reportBuffer, 8); // посылаем в ответ пакет Это из проекта на AVRе. Подскажите, как первую команду для CY7C63813 организовать. ---------------------------------------------------- (дополнено) Может, кому пригодится. Решил так: if (USB_bGetConfiguration()) // Only send report if USB device is configured { USB_LoadEP(1,(UINT8*)&report_packet,8); // Send to PC report_packet while(!USB_bGetEPState(1)); // Waits for ACK from PC } Главное работает нормально.
  20. USB

    USB HID в CY7C63813-SXC может работать со всеми выключенными таймерами? Хочу сделать HID клавиатуру на CY7C63813. Но у меня проблема. Если при нажатой кнопке зациклить "USB_LoadEP(1,(UINT8*)&report_packet,8);", то постоянно быстро печатается буква. А если после нажатия только один раз вызвать эту функцию, то ничего не печатается. Как обнаружить запрос компа и в нужный момент ответить на него посылкой данных? Расскажите кто-нибудь про функции: USB_bCheckActivity USB_bGetConfiguration USB_bGetEPState USB_EnableOutEP Может, кто подскажет, в чем проблема. Уже несколько дней с ней парюсь. (
×
×
  • Создать...