STM32 новичку в ARM что к чему
- Сообщения: 2089
- Зарегистрирован: Вс июн 19, 2016 09:32:03
[uquote="a5021",url="/forum/viewtopic.php?p=3931415#p3931415"]"Частота скакнула" -- это и есть суть явления, упомянутого мной, как "дрожание". Совершенно точно, что ни "триггер", ни "крутизна" никак на него не влияют.[/uquote]Суть в том, что частота HSI дрожит на порядки меньше, чем может показаться по видео и в таком случае ничего в этом удивительного нет. Вероятно такие-же скачки можно получить и для HSE если заставить мк чуть больше пошуметь, например, вывести сигнал другой частоты на еще один пин...
- Реклама
- Сообщения: 3386
- Зарегистрирован: Пн окт 11, 2010 19:00:08
ARV, вижу вы частый гость в этой теме?
Таки начали изучать STM32? 
- Сообщения: 6457
- Зарегистрирован: Пт сен 13, 2013 13:11:31
[uquote="Reflector",url="/forum/viewtopic.php?p=3931418#p3931418"]Суть в том, что частота HSI дрожит на порядки меньше, чем может показаться по видео и в таком случае ничего в этом удивительного нет. Вероятно такие-же скачки можно получить и для HSE если заставить мк чуть больше пошуметь, например, вывести сигнал другой частоты на еще один пин...[/uquote]
Давайте без вот этих вот фантазий про "на порядки", "может показаться" и "вероятно.. можно получить". Два видео отсняты с одного и того же осциллографа с неизменными настройками, подключенного к одной и той же схеме. Разница лишь в том, что в одном случае к выходу MCO внутри мк скоммутирован генератор HSE, а в другом HSI.
Давайте без вот этих вот фантазий про "на порядки", "может показаться" и "вероятно.. можно получить". Два видео отсняты с одного и того же осциллографа с неизменными настройками, подключенного к одной и той же схеме. Разница лишь в том, что в одном случае к выходу MCO внутри мк скоммутирован генератор HSE, а в другом HSI.
нет. но пока не потерял надежду найти причину это сделать. потому слежу за содержимым. причин же пока не нахожу...Мурик писал(а):Таки начали изучать STM32?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 3386
- Зарегистрирован: Пн окт 11, 2010 19:00:08
Тот кто не хочет найти ни когда не найдет (даже если найдет, сделает вид что не видел).ARV писал(а):причин же пока не нахожу
- Реклама
[uquote="a5021",url="/forum/viewtopic.php?p=3931466#p3931466"]Давайте без вот ...[/uquote]
просто Вы не показали момент синхронизации, поэтому и пошел такой разговор.
если б по видео было видно - что фронт, по которому синхронизируется развертка "стоит как вкопанный", а далее вправо от него фронты "пляшут" - все б было понятно и разговора за триггер не было б.
просто Вы не показали момент синхронизации, поэтому и пошел такой разговор.
если б по видео было видно - что фронт, по которому синхронизируется развертка "стоит как вкопанный", а далее вправо от него фронты "пляшут" - все б было понятно и разговора за триггер не было б.
- Сообщения: 1849
- Зарегистрирован: Вс дек 25, 2016 08:34:54
a5021, судя по вашему осциллографу у вас нестабильность частоты +-0,4ns (+-25кГц для 8МГц), а это 10-3, что вы еще хотите от RC генератора?
- Сообщения: 7049
- Зарегистрирован: Сб янв 28, 2006 22:47:24
Тем более от RC генератора соседствующего с туевой хучей цифровой логики и питающегося от одного с ними источника без развязки внутри одного корпуса. Джиттер в таких условиях обязательно будет присутствовать.
Но, следовало бы фронты импульсов к нормальному виду привести, нагрузкой выхода MCO и подключением щупа непосредственно к выводу. Думаю, дрожание обусловленное нестабильностью момента запуска развертки осциллографа заметно снизится.
Но, следовало бы фронты импульсов к нормальному виду привести, нагрузкой выхода MCO и подключением щупа непосредственно к выводу. Думаю, дрожание обусловленное нестабильностью момента запуска развертки осциллографа заметно снизится.
Астролябия-сама меряет, было бы что мерять!!!
- Сообщения: 1849
- Зарегистрирован: Вс дек 25, 2016 08:34:54
Да у него и кварц дрожит, обратите внимание, прыгает между 124,8 и 125,2 , а это уже +-13кГц.
Интересно кварц хоть запаян, или на штырьках?
Интересно кварц хоть запаян, или на штырьках?
- Сообщения: 7049
- Зарегистрирован: Сб янв 28, 2006 22:47:24
Да, есть чуть-чуть. Но у меня сейчас STM32F042 стоит в беспаечной макетной плате, там же кварц 4 МГц подключенный проводами по 50 мм. Но таких рывков фазы не наблюдается на MCO.
Еще раз замечу, что причина может быть не столько в генераторе, сколько в том, что синхронизация осциллографа сходит с ума из-за кривого "меандра".
И еще мы не знаем, что там с питанием и с разводкой общего провода.
Еще раз замечу, что причина может быть не столько в генераторе, сколько в том, что синхронизация осциллографа сходит с ума из-за кривого "меандра".
И еще мы не знаем, что там с питанием и с разводкой общего провода.
Астролябия-сама меряет, было бы что мерять!!!
- Сообщения: 6457
- Зарегистрирован: Пт сен 13, 2013 13:11:31
Чет происходящее все больше начинает напоминать виктимблейдинг -- когнитивное искажение, проявляющееся в том, что реальная картина мира плохо ложится на идеализированные представления об этом самом мире. Раз реальность идет вразрез с представлениями, то виновата, разумеется, реальность. Остается пустячок -- найти виноватых вовне: "дрожит триггер", "крутизна фронта гуляет", "кварц на штырьках", "кривой меандр", "что там с питанием" и т.п.
Голубая пилюля -- известная схема. Куда там запаян кварц и что с разводкой можно посмотреть в гугле. На подопытном экземпляре МК получает питание с XC6204 -- "highly precise, low noise, positive voltage LDO regulator" -- цитата с даташита.
Голубая пилюля -- известная схема. Куда там запаян кварц и что с разводкой можно посмотреть в гугле. На подопытном экземпляре МК получает питание с XC6204 -- "highly precise, low noise, positive voltage LDO regulator" -- цитата с даташита.
- Сообщения: 7049
- Зарегистрирован: Сб янв 28, 2006 22:47:24
А все же включите резистор ом на 470 между выходом и общим проводом, и прямо в ногу ему щупом осциллографа, в ногу.
Астролябия-сама меряет, было бы что мерять!!!
вы не способны допустить, что существует иная точка зрения, отличная от вашей? только дикари падки на все яркое-блестящее-звонкое, нормально развитым людям нужно нечто большее, чтобы возжелать обладать им.Мурик писал(а):Тот кто не хочет найти ни когда не найдет
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 6457
- Зарегистрирован: Пт сен 13, 2013 13:11:31
[uquote="Asmodey",url="/forum/viewtopic.php?p=3931604#p3931604"]А все же включите резистор ом на 470 между выходом и общим проводом, и прямо в ногу ему щупом осциллографа, в ногу.[/uquote]
Вы советуете странное с этим самым резистором. Выход сконфигурирован, как push-pull 50MHz, что ставит жирный крест на надеждах что-то улучшить подгрузив пин резистором. Осциллом в ногу тыкал и картинка в области минимальных и максимальных уровней выглядит чуть лучше, но на частотно-фазовых характеристиках сигнала это никак не сказалось.
Вы советуете странное с этим самым резистором. Выход сконфигурирован, как push-pull 50MHz, что ставит жирный крест на надеждах что-то улучшить подгрузив пин резистором. Осциллом в ногу тыкал и картинка в области минимальных и максимальных уровней выглядит чуть лучше, но на частотно-фазовых характеристиках сигнала это никак не сказалось.
Подскажите пожалуйста,как настроить I2C в STM32F03
Пытаюсь освоить СТМ,дошел до I2C и не могу одолеть (COOCOX)
Пытаюсь освоить СТМ,дошел до I2C и не могу одолеть (COOCOX)
Одна цифра пропущена. F103 или F030?
Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
На 103 все замечательно, а вот с 030 проблема, старт проходит и все, далее ничего не отправляется, позже выложу свой исходник (сейчас на работе)
Забросил,поставлю 103-й...
Забросил,поставлю 103-й...
- Сообщения: 1849
- Зарегистрирован: Вс дек 25, 2016 08:34:54
код еще нужен, будете заниматься с кодом?Novice user писал(а):а вот с 030 проблема
Я вчера весь вечер гуглил, не нашёл, где то прочитал что I2C вSTM32F030 тот ещё геморр, старт/стоп идут норм, а
При отправке команд в место битов в SDA идут ноли (SCL идёт как положено)
Код ещё интересует, но сегодня проверить не смогу
У меня на плате распаян кроме STM ещё SSD1306, RDA5807, 4 кнопки, прошиваю стлинком
При отправке команд в место битов в SDA идут ноли (SCL идёт как положено)
Код ещё интересует, но сегодня проверить не смогу
У меня на плате распаян кроме STM ещё SSD1306, RDA5807, 4 кнопки, прошиваю стлинком
- Сообщения: 1849
- Зарегистрирован: Вс дек 25, 2016 08:34:54
Не знаю, я по началу думал что 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;
}
}


