STM32 новичку в ARM что к чему
Re: STM32 новичку в ARM что к чему
a5021, судя по вашему осциллографу у вас нестабильность частоты +-0,4ns (+-25кГц для 8МГц), а это 10-3, что вы еще хотите от RC генератора?
- Реклама
Re: STM32 новичку в ARM что к чему
Тем более от RC генератора соседствующего с туевой хучей цифровой логики и питающегося от одного с ними источника без развязки внутри одного корпуса. Джиттер в таких условиях обязательно будет присутствовать.
Но, следовало бы фронты импульсов к нормальному виду привести, нагрузкой выхода MCO и подключением щупа непосредственно к выводу. Думаю, дрожание обусловленное нестабильностью момента запуска развертки осциллографа заметно снизится.
Но, следовало бы фронты импульсов к нормальному виду привести, нагрузкой выхода MCO и подключением щупа непосредственно к выводу. Думаю, дрожание обусловленное нестабильностью момента запуска развертки осциллографа заметно снизится.
Астролябия-сама меряет, было бы что мерять!!!
Re: STM32 новичку в ARM что к чему
Да у него и кварц дрожит, обратите внимание, прыгает между 124,8 и 125,2 , а это уже +-13кГц.
Интересно кварц хоть запаян, или на штырьках?
Интересно кварц хоть запаян, или на штырьках?
Re: STM32 новичку в ARM что к чему
Да, есть чуть-чуть. Но у меня сейчас STM32F042 стоит в беспаечной макетной плате, там же кварц 4 МГц подключенный проводами по 50 мм. Но таких рывков фазы не наблюдается на MCO.
Еще раз замечу, что причина может быть не столько в генераторе, сколько в том, что синхронизация осциллографа сходит с ума из-за кривого "меандра".
И еще мы не знаем, что там с питанием и с разводкой общего провода.
Еще раз замечу, что причина может быть не столько в генераторе, сколько в том, что синхронизация осциллографа сходит с ума из-за кривого "меандра".
И еще мы не знаем, что там с питанием и с разводкой общего провода.
Астролябия-сама меряет, было бы что мерять!!!
Re: STM32 новичку в ARM что к чему
Чет происходящее все больше начинает напоминать виктимблейдинг -- когнитивное искажение, проявляющееся в том, что реальная картина мира плохо ложится на идеализированные представления об этом самом мире. Раз реальность идет вразрез с представлениями, то виновата, разумеется, реальность. Остается пустячок -- найти виноватых вовне: "дрожит триггер", "крутизна фронта гуляет", "кварц на штырьках", "кривой меандр", "что там с питанием" и т.п.
Голубая пилюля -- известная схема. Куда там запаян кварц и что с разводкой можно посмотреть в гугле. На подопытном экземпляре МК получает питание с XC6204 -- "highly precise, low noise, positive voltage LDO regulator" -- цитата с даташита.
Голубая пилюля -- известная схема. Куда там запаян кварц и что с разводкой можно посмотреть в гугле. На подопытном экземпляре МК получает питание с XC6204 -- "highly precise, low noise, positive voltage LDO regulator" -- цитата с даташита.
- Реклама
Re: STM32 новичку в ARM что к чему
А все же включите резистор ом на 470 между выходом и общим проводом, и прямо в ногу ему щупом осциллографа, в ногу.
Астролябия-сама меряет, было бы что мерять!!!
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18673
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: STM32 новичку в ARM что к чему
вы не способны допустить, что существует иная точка зрения, отличная от вашей? только дикари падки на все яркое-блестящее-звонкое, нормально развитым людям нужно нечто большее, чтобы возжелать обладать им.Мурик писал(а):Тот кто не хочет найти ни когда не найдет
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: STM32 новичку в ARM что к чему
[uquote="Asmodey",url="/forum/viewtopic.php?p=3931604#p3931604"]А все же включите резистор ом на 470 между выходом и общим проводом, и прямо в ногу ему щупом осциллографа, в ногу.[/uquote]
Вы советуете странное с этим самым резистором. Выход сконфигурирован, как push-pull 50MHz, что ставит жирный крест на надеждах что-то улучшить подгрузив пин резистором. Осциллом в ногу тыкал и картинка в области минимальных и максимальных уровней выглядит чуть лучше, но на частотно-фазовых характеристиках сигнала это никак не сказалось.
Вы советуете странное с этим самым резистором. Выход сконфигурирован, как push-pull 50MHz, что ставит жирный крест на надеждах что-то улучшить подгрузив пин резистором. Осциллом в ногу тыкал и картинка в области минимальных и максимальных уровней выглядит чуть лучше, но на частотно-фазовых характеристиках сигнала это никак не сказалось.
-
Novice user
- Мудрый кот
- Сообщения: 1704
- Зарегистрирован: Вт янв 05, 2016 10:14:25
- Откуда: поселок Мелеуз
Re: STM32 новичку в ARM что к чему
Подскажите пожалуйста,как настроить I2C в STM32F03
Пытаюсь освоить СТМ,дошел до I2C и не могу одолеть (COOCOX)
Пытаюсь освоить СТМ,дошел до I2C и не могу одолеть (COOCOX)
- Zhuk72
- Сверлит текстолит когтями
- Сообщения: 1231
- Зарегистрирован: Ср янв 29, 2014 08:41:31
- Откуда: Баку
- Контактная информация:
Re: STM32 новичку в ARM что к чему
Одна цифра пропущена. F103 или F030?
Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
-
Novice user
- Мудрый кот
- Сообщения: 1704
- Зарегистрирован: Вт янв 05, 2016 10:14:25
- Откуда: поселок Мелеуз
Re: STM32 новичку в ARM что к чему
На 103 все замечательно, а вот с 030 проблема, старт проходит и все, далее ничего не отправляется, позже выложу свой исходник (сейчас на работе)
Забросил,поставлю 103-й...
Забросил,поставлю 103-й...
Re: STM32 новичку в ARM что к чему
код еще нужен, будете заниматься с кодом?Novice user писал(а):а вот с 030 проблема
-
Novice user
- Мудрый кот
- Сообщения: 1704
- Зарегистрирован: Вт янв 05, 2016 10:14:25
- Откуда: поселок Мелеуз
Re: STM32 новичку в ARM что к чему
Я вчера весь вечер гуглил, не нашёл, где то прочитал что I2C вSTM32F030 тот ещё геморр, старт/стоп идут норм, а
При отправке команд в место битов в SDA идут ноли (SCL идёт как положено)
Код ещё интересует, но сегодня проверить не смогу
У меня на плате распаян кроме STM ещё SSD1306, RDA5807, 4 кнопки, прошиваю стлинком
При отправке команд в место битов в SDA идут ноли (SCL идёт как положено)
Код ещё интересует, но сегодня проверить не смогу
У меня на плате распаян кроме STM ещё SSD1306, RDA5807, 4 кнопки, прошиваю стлинком
Re: STM32 новичку в ARM что к чему
Не знаю, я по началу думал что I2C вообще не работает, хотя у меня отладчика не было.Novice user писал(а):I2C вSTM32F030 тот ещё геморр,
Код взят с этого форума
Вот в том виде в котором у меня работает с модулем LCD I2C pcf8574, меня интересовала только передача
Спойлер
Код: Выделить всё
void init_I2C1(void)
{
RCC_I2CCLKConfig(RCC_I2C1CLK_HSI); // I2C Clock Mux - HSI
// Включаем тактирование нужных модулей
//RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE);
RCC->AHBENR |= RCC_AHBENR_GPIOAEN;
// Тактирование GPIO не включаю, т.к. оно уже включено в начале программы
RCC->APB1ENR |= RCC_APB1ENR_I2C1EN; // Включаю тактирование I2C
// Настройка ног PA9, PA10
GPIOA->MODER |= GPIO_MODER_MODER9_1 | GPIO_MODER_MODER10_1; // Режим альтернативной функции
GPIOA->OTYPER |= GPIO_OTYPER_OT_9 | GPIO_OTYPER_OT_10; // Открытый коллектор
GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR9 | GPIO_OSPEEDER_OSPEEDR10; // Максимальная скорость GPIO_OSPEEDER_OSPEEDR9
// Выбор альтернативной функции
GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_4); // I2C1_SCL
GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_4); // I2C1_SDA
I2C_BUS->CR1 &= ~I2C_CR1_PE; // Отключаю I2C
while (I2C_BUS->CR1 & I2C_CR1_PE) {}; // Жду пока отключится
// Частота тактирования модуля I2C = 48 МГц
// Частота шины I2C = 100 kHz
// Настраиваю тайминги
/*I2C_BUS->TIMINGR |= \
(0xB << I2C_OFFSET_TIMINGR_PRESC)|\
(0x13 << I2C_OFFSET_TIMINGR_SCLL)|\
(0xF << I2C_OFFSET_TIMINGR_SCLH)|\
(0x4 << I2C_OFFSET_TIMINGR_SCLDEL)|\
(0x2 << I2C_OFFSET_IMINGR_SDADEL);
*/
I2C_BUS->TIMINGR = (uint32_t)0x2000090E;
I2C_BUS->CR1 |= I2C_CR1_PE; // Включаю I2C
while ((I2C_BUS->CR1 & I2C_CR1_PE)==0) {}; // Жду пока включится
}
/*
Выполняет транзакцию записи Size байт в регистр Register по адресу Adress.
Параметры:
Adress - адрес ведомого устройства
Register - регистр, в который хотим передать данные
Data - указывает откуда брать данные для передачи
Size - сколько байт хотим передать (от 1 до 254)
Возвращает:
1 - если данные успешно переданы
0 - если произошла ошибка
*/
//u8 I2C_Write_Transaction (u8 Adress, u8 Register, u8 *Data, u8 Size)
void I2C_Write_Transaction (uint8_t Adress, uint8_t Data)
{
// Старт
I2C_Start_Direction_Adress_Size (I2C_Transmitter, Adress, 1+1);//1+1);
// Отправляем байты до тех пор, пока не взлетит TC-флаг.
// Если взлетит NACK-флаг, отправку прекращаем.
while ((((I2C_BUS->ISR & I2C_ISR_TC)==0) && ((I2C_BUS->ISR & I2C_ISR_NACKF)==0)) && (I2C_BUS->ISR & I2C_ISR_BUSY))
{
if (I2C_BUS->ISR & I2C_ISR_TXIS) I2C_BUS->TXDR= Data; // Отправляю данные
}
I2C_Stop();
}
/*
Это служебная функция, использовать её не нужно.
Устанавливает направление данных - приём или передача.
Задаёт объём пересылаемых данных.
Задаёт адрес ведомого устройства.
Выдаёт старт на шину.
Параметры:
Direction - направление (0-отправка, 1-приём)
Adress - адрес ведомого устройства
Size - размер данных (от 1 до 255 байт)
*/
void I2C_Start_Direction_Adress_Size (I2C_Direction Direction, uint8_t Adress, uint8_t Size)
{
if (Direction) I2C_BUS->CR2 |= I2C_CR2_RD_WRN; // Режим приёма
else I2C_BUS->CR2 &= ~I2C_CR2_RD_WRN; // Режим передачи
I2C_BUS->CR2 &= ~I2C_CR2_NBYTES; // Очистить размер данных
I2C_BUS->CR2 |= Size<<I2C_OFFSET_CR2_NBYTES; // Установить размер данных
I2C_BUS->CR2 &= ~I2C_CR2_SADD; // Очистить адрес ведомого устройства
I2C_BUS->CR2 |= (Adress << 1); // Установить адрес ведомого устройства
I2C_BUS->CR2 |= I2C_CR2_START; // Выдать старт на шину
while ((I2C_BUS->ISR & I2C_ISR_BUSY)==0) {}; // Ожидать выдачу старта
}
/*
Это служебная функция, использовать её не нужно.
Выдаёт стоп на шину.
Очищает флаги.
Проверяет наличие ошибок, очищает флаги ошибок.
*/
void I2C_Stop (void)
{
I2C_BUS->CR2 |= I2C_CR2_STOP; // Выдать стоп на шину
while (I2C_BUS->ISR & I2C_ISR_BUSY) {}; // Ожидать выдачу стопа
// Очищаю флаги - необходимо для дальнейшей работы шины
I2C_BUS->ICR |= I2C_ICR_STOPCF; // STOP флаг
I2C_BUS->ICR |= I2C_ICR_NACKCF; // NACK флаг
// Если есть ошибки на шине - очищаю флаги
if (I2C_BUS->ISR & (I2C_ISR_ARLO | I2C_ISR_BERR))
{
I2C_BUS->ICR |= I2C_ICR_ARLOCF;
I2C_BUS->ICR |= I2C_ICR_BERRCF;
}
}-
Novice user
- Мудрый кот
- Сообщения: 1704
- Зарегистрирован: Вт янв 05, 2016 10:14:25
- Откуда: поселок Мелеуз
Re: STM32 новичку в ARM что к чему
Спасибо! Буду разбираться
-
kvn234
- Потрогал лапой паяльник
- Сообщения: 339
- Зарегистрирован: Вс апр 17, 2011 09:51:26
- Откуда: Тула
Re: STM32 новичку в ARM что к чему
Здравствуйте.
Изучаю SPI на STM32f030. Не могу понять почему из регистра DR считывается не правильное значение.
Вначале выдается команда на чтение сигнатуры, затем чтение 3х байт. Читаются из DR 0xFF, 0xC8 и 0x40.
Должно быть 0xC8, 0x40, 0x16.

Если включаю строку LL_SPI_ReceiveData8(SPI1) то информация читается корректно.
Такое впечатление, что в SPI FIFO буфер. В интернете этот нюанс не нашел.
Изучаю SPI на STM32f030. Не могу понять почему из регистра DR считывается не правильное значение.
Спойлер
Код: Выделить всё
// Сигнатура
void w25qReadManuf(uint8_t *answer)
{
uint8_t status = W25Q_JEDEC_ID;
uint8_t i;
W25Q_CS_LO();
// Передать команду
while(!LL_SPI_IsActiveFlag_TXE(SPI1));
LL_SPI_TransmitData8(SPI1, status);
while(LL_SPI_IsActiveFlag_BSY(SPI1));
//LL_SPI_ReceiveData8(SPI1);//Очистка буфера
// Прочитать сигнатуру
for(i=0 ; i<3 ; i++)
{
LL_SPI_TransmitData8(SPI1,0xFF);
while(!LL_SPI_IsActiveFlag_RXNE(SPI1));
*(answer++) = LL_SPI_ReceiveData8(SPI1);
}
W25Q_CS_HI();
}
Должно быть 0xC8, 0x40, 0x16.
Если включаю строку LL_SPI_ReceiveData8(SPI1) то информация читается корректно.
Такое впечатление, что в SPI FIFO буфер. В интернете этот нюанс не нашел.
Последний раз редактировалось kvn234 Пт дек 18, 2020 00:45:53, всего редактировалось 1 раз.
Re: STM32 новичку в ARM что к чему
[uquote="kvn234",url="/forum/viewtopic.php?p=3943137#p3943137"]Такое впечатление, что в SPI FIFO буфер.[/uquote]
Да, что в этом удивительного? Первый раз читается байт принятый при отправке status. По нормальному нужно перед чтением для RX FIFO делать flush:
А перед этим дождаться окончания передачи, для чего проверки BSY недостаточно, такое работало для SPI без FIFO. Должно быть так:
Да, что в этом удивительного? Первый раз читается байт принятый при отправке status. По нормальному нужно перед чтением для RX FIFO делать flush:
Код: Выделить всё
while (SPI1->SR & SPI_SR_FRLVL) SPI1->DR;Код: Выделить всё
while (SPI1->SR & (SPI_SR_FTLVL | SPI_SR_BSY)) {}Не нашел в интернете RM на мк?В интернете этот нюанс не нашел.
-
kvn234
- Потрогал лапой паяльник
- Сообщения: 339
- Зарегистрирован: Вс апр 17, 2011 09:51:26
- Откуда: Тула
Re: STM32 новичку в ARM что к чему
[uquote="Reflector",url="/forum/viewtopic.php?p=3943142#p3943142"][/uquote]
Спасибо.
Здесь понятно, буфер очищается.
Если будем дожидаться окончания передачи не попадем ли мы в бесконечный цикл, т.к. не происходит чтения DR ?
Спасибо.
Здесь понятно, буфер очищается.
Код: Выделить всё
while (SPI1->SR & SPI_SR_FRLVL) SPI1->DR;Код: Выделить всё
while (SPI1->SR & (SPI_SR_FTLVL | SPI_SR_BSY)) {}Re: STM32 новичку в ARM что к чему
[uquote="kvn234",url="/forum/viewtopic.php?p=3943150#p3943150"]не попадем ли мы в бесконечный цикл, т.к. не происходит чтения DR ?[/uquote]
Дождаться нужно окончания передачи, там свое FIFO, чтение DR тут не при чем.
Дождаться нужно окончания передачи, там свое FIFO, чтение DR тут не при чем.
-
kvn234
- Потрогал лапой паяльник
- Сообщения: 339
- Зарегистрирован: Вс апр 17, 2011 09:51:26
- Откуда: Тула
Re: STM32 новичку в ARM что к чему
[uquote="Reflector",url="/forum/viewtopic.php?p=3943152#p3943152"][uquote="kvn234",url="/forum/viewtopic.php?p=3943150#p3943150"]не попадем ли мы в бесконечный цикл, т.к. не происходит чтения DR ?[/uquote]
Дождаться нужно окончания передачи, там свое FIFO, чтение DR тут не при чем.[/uquote]
Не увидел, что FIFO TX
Дождаться нужно окончания передачи, там свое FIFO, чтение DR тут не при чем.[/uquote]
Не увидел, что FIFO TX


