Поиск сообщества
Показаны результаты для тегов 'STM'.
Найдено: 13 результатов
-
Написание микрокода на С для управления STM32. Опыт реализации успешных проектов очень обязателен. Опыт схемотехники и построения схем принципиальных приветствуется. Проект связан с написанием микрокода для управления GPS чипом, RFM модулем передачи, эмулирование USB порта на STM32L433CCT6. Подробности в переписке. Специалистов которые очень заняты, у которых нет времени и они спешат по другим проектам, но могут сделать за день по предоплате, просьба спешить далее. Мне нужен спокойный, четкий подход квалифицированного человека, готового работать в нужном направлении. https://t.me/NedelaS
-
- C++
- программирование
-
(и ещё 2 )
C тегом:
-
Здравствуйте, помогите подключить USB-флешку к STM32F103RCT6, нужна дополнить принципиальную схему. Если есть возможность нарисовать.
-
Привет, знатоки. Написал свою первую программу для контроллера STM8L152C6T6 (STM8L-Discovery). Это, собственно, моя первая программа для контроллеров вообще. Я многого не знаю и не понимаю. Возможно ваш ответ на мой вопрос будет банален. Используемая периферия: DAC, DMA, TIM4, CLK, GPIO Задача у программы такая: В EEPROM зашит один период синусоиды с дискретизацией 44100Гц. Период занимает ровно 101 байт, что по сути должно быть равно 2,29мс (1/44100*101). В коде программы только конфигурация периферии, одно прерывание на кнопке и пустой бесконечный цикл, который ничего не делает. Всю работу выполняет таймер, который настроен выдавать запрос к DMA на каждые 1/44100 (ядро тактируется 2мГц, таймер считает до 45). В свою очередь DMA забирает из EEPROM по одному байту на каждый запрос от таймера и передаёт его в DAC. Далее DAC выводит бесконечную синусоиду на ногу PF0. Прерывание на кнопке запускает весь этот механизм и зажигает светодиод. Проблема: Измеряя ногу PF0 осциллографом было замечено, что период синусоиды занимает около ≈4мс. Фото под катом. Меня это расстроило. Экспериментально выяснилось, что стоит только вписать в бесконечный цикл какую-нибудь проверку, например, [если значение текущего байта синусоиды = 0xFF, то зажечь светодиод, если 0x00, то потушить], то осциллограф показывает правильный тайминг в 2(с копейками)мс. В принципе в теле цикла может быть что угодно, кроме пустоты, и тайминг налаживается. Я не могу отдебажить дизассемблер, т.к. его не знаю. Это у меня в планах. Но я очень хочу понять, что происходит и почему пустой цикл рушит тайминг. Спасибо.
- 13 ответов
-
-1
-
Привет. Хочу узнать ваше мнение. Я новичок в embedded. Можно сказать, что пришел с веба. Малость Python, JS, C. Меня, конечно, предупреждали начать с AVR, но я уверенный в себе решил сразу залезть на STM32. Вынашивая идею для проекта, параллельно курив Reference Manual и Data Sheet по STM32, я понял что его будет слишком жирно для проекта. Я перескочил на STM8L. И тут меня начал огорчать мир embedded. При переходе между stm8 и stm32 нужно менять IDE (TrueStudio на STVD). Во избежание таких курьёзов я пересаживаюсь на IAR. В процессе подключения родной библиотеки от ST, понимаю что библиотека от IAR для того же самого STM8L152C6T6 дико отличается (макросы, структуры). Привет веб-разработка. Как такое могло произойти, что под один и тот же контроллер ST даёт одну библиотеку, а IAR другую. И нигде в уроках тебя не предупредят об этом. Ну, ребят, у меня всего одна жизнь. Вы уже договоритесь там между собой? Придите к единому стандарту. Или они так решили новичков завендерлочить? Моё мнение (не претендует на правильное): пробираясь сквозь тернии популярной архитектуры ARM, инфраструктуры, инструментария, забываешь про бизнес-логику устройств. А еще просто пропасть между "я ничего не понимаю" и "господи, я зажег светодиод". Речь не о копипастерах с уроков, а действительно понимая что ты делаешь, в каком регистре, что меняешь. Это путь в 2000 (а то и больше) страниц на английском перечитанных по несколько раз, чтобы отоложилось. И в конце тебя ждут разные версии одной и той же библиотки в разных IDE. И сидишь вдупляешь... ну почему... я же в правильный регистр кладу правильную маску... ох, наболело. Такое ощущение что не для людей это всё делали, не для людей. Ваше мнение?
-
Здравствуйте уважаемые форумчане. Пытаюсь связать два микроконтроллера по шине LIN. В качестве мастера выбрал контроллер STM8S103F3P6 (Его Usart умеет только LIN MASTER). В качестве ведомого выбрал STM8S208RBT6 (У него 2 Усарта, один из которых умеет быть ведомым LIN) Собрал на двух макетных платах. LIN трансивер TJA1020 Прием и передача работают нормально. Но как дошло дело до защиты от потери линии связи, тут возникли проблемы. После обрыва линии связи и ее восстановления связь возобновляется. Но вот после короткого замыкания шины LIN ведомое (SLAVE) устройство намертво виснет. Точнее виснет в обработчике прерывания от USART3. Я пытался принудительно очистить флаг приема по узарту (UART3_FLAG_RXNE) и флаг приема хедер байта (UART3_FLAG_LHDF). А также скидывал флаг брэйк байта (UART3_FLAG_LBDF). Ничего не помогает программа не возвращается из прерывания по приему от USART_3. Но зато если в этот момент с ведущего устройства снова подать команду, то работоспособность ведомого устройства восстанавливается. Тоже самое помогает, если в обработчике прерывания по USART_3 принудительно подать рандомную команду на передачу. То есть, так как линия одна, она сама свою же команду и принимает, получается. Вроде все нормально, но как то коробит такой колхозный способ защиты от короткого замыкания шины. Подскажите, может я забываю еще какой нибудь скинуть флаг при случае коротыша на линии LIN или есть еще каrой нибудь правильный способ обойти защиту от потери связи после кратковременного замыкания на шине. Надеюсь тут есть люди, которые что-то делали с шиной LIN ? Прилагаю инициализацию для мастер устройства UART1_Init( 9600, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE); UART1_LINBreakDetectionConfig( UART1_LINBREAKDETECTIONLENGTH_11BITS); UART1_ITConfig( UART1_IT_RXNE_OR, ENABLE); UART1_LINCmd( ENABLE); enableInterrupts(); И для Ведомого устройства UART3_Init( 9600, UART3_WORDLENGTH_8D, UART3_STOPBITS_1, UART3_PARITY_NO, UART3_MODE_TXRX_ENABLE); UART3_LINConfig( UART3_LIN_MODE_SLAVE, UART3_LIN_AUTOSYNC_ENABLE,UART3_LIN_DIVUP_LBRR1); UART3_LINBreakDetectionConfig( UART3_LINBREAKDETECTIONLENGTH_11BITS); UART3_ITConfig( UART3_IT_RXNE_OR, ENABLE); UART3_ITConfig( UART3_IT_LBDF, ENABLE); UART3_ITConfig( UART3_IT_LHDF, ENABLE); UART3_LINCmd( ENABLE); enableInterrupts(); А также обработчик прерывания для ведомого устройства //Обработчик прерывания для UART3. INTERRUPT_HANDLER( UART3_RX_IRQHandler, 21) { if( UART3_GetFlagStatus( UART3_FLAG_LHDF)){recUART3_Header=UART3_ReceiveData8(); UART3_ClearFlag(UART3_FLAG_LHDF);} if( UART3_GetFlagStatus( UART3_FLAG_RXNE)){recUART3_Data=UART3_ReceiveData8(); UART3_ClearFlag(UART3_FLAG_RXNE);} if( UART3_GetFlagStatus( UART3_FLAG_LBDF)){ UART3_ClearFlag( UART3_FLAG_LBDF);} if( UART3_GetFlagStatus(UART3_FLAG_OR_LHE)){UART3_SendData8(0x00);UART3_ClearFlag(UART3_FLAG_OR_LHE);}// Отправляю пустую команду через USART_3 }
-
Необходимо выводить на блок из 4 семисегментных индикаторов данные, управление лежит на двух сдвиговых регистрах: Первый хранит в себе число на вывод, второй адрес(адресует на конкретный разряд в блоке). Данные передаю через аппаратный SPI, настроенный в STM32CubeMX, но он у меня не работает. Мой алгоритм Задаю наборы для отображения на индикаторе и адресные наборы для перемещения по разрядам в блоке. uint8_t i,j = 0; uint8_t buff[8] = {1,2,3,4,5,6,7,8}; uint8_t digit[10] = { 0xC0, // 0 0xF9, // 1 0xA4, // 2 0xB0, // 3 0x99, // 4 0x92, // 5 0x82, // 6 0xF8, // 7 0x80, // 8 0x90, // 9 }; uint8_t chr[4] = { 0x8, 0x4, 0x2, 0x1 }; Строб необходим для начала записи данных в регистр хранения сдвигового регистра void strob(void){ HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET); HAL_Delay(85); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET); HAL_Delay(85); } Функция передачи данных с использованием HAL функции и строба. void spi_send(uint8_t *data, uint8_t it){ strob(); uint8_t *d = data; for(j = 0; j <=it; j++){ d = &data[j]; HAL_SPI_Transmit ( &hspi1, d, 8, 50); } strob(); } Отправляю смешение по элементам блока семисегментного индикатора. while (1) { i++; if(i<=4){ spi_send(chr, i); } else i = 4; i = -1; s.7z Файлы с IAR проектом и CubeMX проектом инициализации. 1dsfs.7z Пример работы индикатора video_2018-07-04_00-13-42.mp4
-
Продам транзисторы: STF12N50M2 - 4шт по 50р STF16N50M2 - 4шт по 65р STP140N6F7 - 14шт по 40р (отличная замена тем же самым IRF3205, даже лучше) IRFP4321 - 2шт по 75р (нет на фото) Микросхемы: PCM2707CPJTR - 2шт по 400р Все детали 100% оригинальные. Нахожусь в г. Новороссийск. Отправлю Почтой России. Оплата на карту СБ. Ну и самое главное - даташиты: STF12N50M2.pdf STF16N50M2.pdf STP140N6F7.pdf IRFP4321.pdf PCM2707C.pdf
- 40 ответов
-
0
-
- микросхема
- транзистор
-
(и ещё 3 )
C тегом:
-
Дали прошивку для приборки . Надо найти теперь XPROG. Есть еще и вторая задача: изменить софт блока управления климатом на spc560d30l3. Для этого надо изучить в чем писать код для него(или заплатить чтоб написали) и загрузить новый код. я только изучаю эту тему и поэтому прошу опытных людей подсказать: могу ли я xprog`ом прошить spc560d30l3, чтобы так сказать не зря покупать xprog? или может подскажите чем ее бюджетно можно прошить.микропроцессор при этом нехотелось бы выпаивать с существующей платы
-
Здравствуйте. Посоветуйте пожалуйста схемы программаторов для AVR и STM- универсальный не надеюсь. Имеется в наличии usbasp китайский-работает как гнилой еврей раз в неделю. Сделал PICKIT2 за 4 года ни одного отказа. usbasp может сегодня тупо отказываться работать на 3 компьютерах, на следующий день как часики прошивает 1-2 камня и опять отдыхает. Надоело.
- 1 ответ
-
- программатор
- avr
-
(и ещё 1 )
C тегом:
-
Обязанности: · Разработка радиоэлектронных и GSM-устройств: разработка схем, программирование, разводка печатных плат, разработка документации. · Программирование микроконтроллеров STM, AVR, ARM, PIC на языке С/С++ в личку или en@argument74.com
-
Доброго! Контроллер stm32f103c8t6. Пишу настройку таймера и его прерываний, но программа зависает через несколько тиков после выхода из самой функции настройки. По коду: в главной функции пишу сразу настройку таймера и далее бесконечный цикл, до которого дело не доходит. На рисунках скрины отладки в момент зависания. void TIM_ini(void) { TIM_TimeBaseInitTypeDef UserTimStruct; NVIC_InitTypeDef UserNVIC_Structure; TIM_DeInit(TIM3); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); UserTimStruct.TIM_ClockDivision = TIM_CKD_DIV4; UserTimStruct.TIM_CounterMode = TIM_CounterMode_Up; UserTimStruct.TIM_Period = 200; UserTimStruct.TIM_Prescaler = 700-1; TIM_TimeBaseInit(TIM3, &UserTimStruct); TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE); TIM_Cmd(TIM3, ENABLE); UserNVIC_Structure.NVIC_IRQChannel = TIM3_IRQn; UserNVIC_Structure.NVIC_IRQChannelCmd = ENABLE; UserNVIC_Structure.NVIC_IRQChannelPreemptionPriority = 1; UserNVIC_Structure.NVIC_IRQChannelSubPriority = 1; NVIC_Init(&UserNVIC_Structure); } ,
- 6 ответов
-
- прерывания
- проблемы
-
(и ещё 3 )
C тегом:
-
День добрый. Поставил для себя задачу создать для своего мотоцикла небольшой компьютер на базе микроконтроллера с выводом информации на дисплей. Кое-какие наработки у меня уже осуществлены и сейчас я стаю перед выбор усовершенствовать свое устройство(получилось очень громоздкая конструкция которая занимает много места и к тому же 2/3 памяти ардуины я задействовал при этом далеко не все еще впихнул) или начинать с нуля. Для начало опишу то что у меня уже есть (осуществлено на базе Ардуино уно, пока что без вывода на экран, но скетч под это у меня уже написан) и что я хочу. Функционал такой: -вольтметр (есть); -термометр (есть); -несколько режимов полуавтоматической смазки цепи (есть как автоматически включающиеся/выключающиеся режимы (считываю сигналы с датчика скорости=>пересчитываю в скорость в зависимости от скорости переключаются режимы, т.е. насос работает либо чаще либо выключается на время либо работает реже), также некоторые режимы включаются вручную с кнопки) - есть, все режимы включаются последовательно; - расчет средней скорости в пути (частично есть); - расчет среднего времени поездки (нет); -расчет расстояния (нет); - считывание данных с нескольких датчиков разного рода(цифровые и аналоговые) и вывод на дисплей(нет, параллельная задача); - вывод на дисплей, еще точно не определился с моделью, пока на примере 5110, но не уверен, нужно что-то по размеру как 5110 но хотелось побольше чем 84х84 для вставления качественных картинок). Собственно вопрос в том по какому пути идти? Оптимизировать задачу на более маленьком ардуино, типа адруино нано (а возможно и на двух) или же начинать с нуля, но тогда встает вопрос о выборе МК (тут я потратив несколько дней пока окончательно запутался) AVR, STM или PIC? Задача планируется как единичная, но хочется получить относительно компактное устройство. П.С. честно читал и искал, но т.к. я "не в теме электроники", мне нужен толчок в нужную сторону Заранее спасибо.
-
Доброго времени суток. Подскажите пожалуйста полезные сайты и литературу для подробного освоения программирования микроконтроллеров линейки STM