Donker
Участник-
Постов
90 -
Зарегистрирован
-
Посещение
Весь контент Donker
-
Спасибо, я так и понял, что разработчики ST над нами издеваются. страницу я перепутал, 581 - правильно.
-
Ладно, допустим с выводом за раз, и без прерываний, массива более 255 байт на STM32F0 через DMA я пролетаю, но как отправить хотя бы 255 байт? Вот так: не отправляется, в ЛА видно что есть старт, и правильно с нормальной скоростью отправляется адрес устройства, и всё, больше никаких байт не идёт и стопа тоже нет. Что не так? Код практически целиком взят из снипетов (см. 1 пост), только изменён I2C2 на I2C1 и канал DMA c 4 на 2 (в снипетах код для STM32F072RBT)
-
Возникли вопросы по регистру I2C1->CR2 в STM32F030F4: Cудя по дащиту (RM стр. 518) там есть секция "NBYTES" которая имеет размерность 8 бит и куда записывается количество байт для передачи (максимум 255), т.е. по максимуму это выглядит так: I2C1->CR2 = I2C_CR2_AUTOEND | (256<<16) | (OLED_addr_127<<1); /* (3) */ я правильно понимаю, что этота секция не даст отправить вподряд более 255 байт между "старт-адрес-..байты...-стоп"? Этот же регистр не даст передать по DMA более 255 байт вподряд, хотя у DMA есть регистр DMA1_Channel2->CNDTR куда можно записать уже 16 бит ?
-
Нашёл ошибку - перепутал AF4 на котором сидит I2C в STM32F030F4 cо смещением номера вывода, правильно так: GPIOA->OTYPER |= GPIO_OTYPER_OT_9 | GPIO_OTYPER_OT_10; /* (1) Open drain for I2C signals */ GPIOA->AFR[1] = (GPIOA->AFR[1] &~ (GPIO_AFRH_AFRH1 | GPIO_AFRH_AFRH2)) | (4 << ((9 - 8) * 4)) | (4 << ((10 - 8) * 4)); /* (2) AF4 for I2C signals */ GPIOA->MODER = (GPIOA->MODER & ~(GPIO_MODER_MODER9 | GPIO_MODER_MODER10)) | (GPIO_MODER_MODER9_1 | GPIO_MODER_MODER10_1); /* (3) Select AF mode (0b10) on PA9 and PA10 */ Поток пошёл, сейчас разбираюсь с порядком следования байт.
-
Пока решил заняться STM32F030F4, для STM32F030F4 у меня работает только ногодрыг, не получается запустить аппаратный I2C, вот часть кода: может кто нибудь заметит ошибку, пока что в ЛА невидно вообще никакой активности на линиях I2C они сидят в высоком уровне даже в момент ресета.
-
Arlleex спасибо, буду разбираться. Заметил что использую 4 канал, а надо 6.
-
Что-то не работает моя переделка снипета от F0 Вот часть кода: Если раскомментировать в функции OLED_SendScreen пересылку без DMA - тогда работает, если выполнить OLED_SendScreen в том виде как сейчас, в ЛА видно что происходит "условие старт", после чего линии лежат в нуле и ничего не передаётся. Снипет смотрел этот:
-
Я просто не пойму почему в версии проекта с ногодрыгом я отправлял абсолютно все байты, включая адрес, на экран одной функцией: а в аппаратной версии, если попытаюсь вместо I2C_SendAddr использовать I2C_SendByte, адрес отправляется, экран нормально реагирует, но происходит бесконечное зависание на этапе ожидания бита подтверждения отправки байта: while (0 == (I2C1->SR1 & I2C_SR1_TXE)){}
-
Как отправить массив (uint8_t) по I2C через DMA на STM32F105RBT6 или STM32F030F4 используя CMSIS? Желательно сначала разобраться как это сделать на STM32F105RBT6 а потом перенести код на STM32F030F4. Сейчас я отправляю на STM32F105RBT6 без DMA буффер OLED экрана (SSD1306 128x32) таким образом: как сюда прикрутить DMA? Можно как то обойтись без функции I2C_SendAddr используя только I2C_SendByte (добавив адрес в начало массива) что бы не ждать пока отправиться байт адреса?
-
Я понял откуда я взял неправильную интерпритацию столбцов Alternate functions и Additional functions, я их подсознательно перепутал со столбцами Default и Remap из датащитов из F1xx серии, а вчера начал делать более информативный компонент STM32F030F4 для DipTrace и случился затык.
-
То есть ситуация что в alternate functions могут встречаться более одного варианта разводки периферии по ногам микросхемы - нормальна? Тогда я что то запутался - в чём смысл отдельных столбцов в таблице Alternate functions и Additional functions ? Уже ответили: http://forum.easyelectronics.ru/viewtopic.php?f=35&t=38418&p=591070#p591070
-
В колонке Alternate functions должно быть написано где появляется переферия по умолчанию, а в колонке Additional functions варианты куда её можно переназначить и там действительно может быть много вариантов.
-
Я тоже там нашёл за 20 сек, все три варианта, поэтому и возник вопрос!
-
Где находится USART1 у STM32F030F4 ?! Варианты: 1) ноги 6, 7, 8, 9, 10 2) ноги 17, 18 3) ноги 20 (только USART1_TX) Ссылка на даташит: https://www.st.com/resource/en/datasheet/stm32f030f4.pdf
-
Вот что мне надо было: можете предложить как сэкономить байт другой флеша или оперативки, а также предложить научно обоснованную поправку вместо "30" , она явно великовата, но ЛА через ногодрыг PB1 трудно понять погрешности самого ногодрыга. На DWT всё это было технически совершенней особенно нравилась что первой строкой: DWT->CYCCNT = 0; //Обнуляем счетчик начинался отсчёт и поправка требовалась меньше.
-
Forger Спасибо ваш код пригодиться для когда понадобиться неблокирующая задержка, мне же пока требуется простейшая блокирующая. Ещё вопрос в STM32F030F4 таймер SysTick 24 битный?
-
Чем заменить DWT на STM32F030F4 для задержек delay_us и delay_ms ? На STM32F105RBT6 замечательно работало так: Можно ли использовать SysTick без прерываний, если можно, то как это сделать на CMSIS (под Keil 5.26) ? Если нельзя, то как это сделать на CMSIS на самом, по вашему мнению, ненужном таймере STM32F030F4?
-
Я точно сам не знаю что я тут включаю, скопипастил откуда то. На другом форуме ответили (http://forum.easyelectronics.ru/viewtopic.php?f=35&t=38368&p=590328#p590328) , такой код заработал: FLASH->ACR = FLASH_ACR_LATENCY; // настраиваем систему тактирования RCC->CR |= RCC_CR_HSEON; //включаем генератор HSE while(!(RCC->CR & RCC_CR_HSERDY)); //ожидание готовности HSE RCC->CFGR2 = RCC_CFGR2_PREDIV_DIV1; // предделитель для PLL RCC->CFGR = RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR_PLLMUL6; // настройка PLL RCC->CR |= RCC_CR_PLLON; //включаем PLL while(!(RCC->CR & RCC_CR_PLLRDY)); //ожидание готовности PLL RCC->CFGR |= RCC_CFGR_SW_PLL; // настраиваем делители шин и переводим тактирование от PLL
-
Как настроить тактирование STM32F030F4 через CMSIS на максимальные частоты от кварца 8мгц, как на скрине от CubeMX ? Вот так работает не на 48мгц а на 8мгц (засекал по частоте срабатывания таймера TIM3 т.к. частоту 48мгц мерить нечем, TIM3 срабатывает через 3сек а не через 0,5сек): Что не так?
-
Спасибо, видел.
-
Начал делать проект под STM32F030F4 и обнаружил что не могу подключить к проекту Standard Peripherals Drivers стандартными средствами, так ка я это делал для серии F1 (см. скрин из проекта от F1), там такой строки просто нет! Как добавить "Standard Peripherals Drivers" для F0 в Keil 5.26? Были ли вообще когда либо сразу в Keil библиотеки "Standard Peripherals Drivers" для серии F0 ?
-
Спасибо k155la3, проблема оказывается в наличии русских символов в пути к проекту. Можно как-то научить Keil толерантности к русским символом в пути к проекту?
-
Спасибо Arlleex, выбор стандартного компилятора 5 версии решает проблему, но можно ли как то заставить нормально работать 6 версию? (возврат на 6 версию проблему возвращает)
-
А какая у вас версия Keil? Клавиши F12 и Ctrl+F12 у вас тоже работают? Откуда такая разница в поведении на одинаковом проекте?
-
Вот например: https://yadi.sk/d/w98_y4E7kJN6Eg Версия Keil 5.26