dimon_rub 0 10 сентября, 2016 Опубликовано 10 сентября, 2016 · Жалоба Здравствуйте. 2 день бьюсь с этой проблемой. Вопрос в следующем на при включении терминала и просмотре посылок от STM32 скорость нужно выбирать в 2 раза больше. Почему не понятно. Пробовал понижать/увеличивать частоты - не помогает. 1. STM32F103RC 2. USART1. 3. PPR2 = 64MHz (здесь изменял частоты) 4. Внешний кварц - 16MHz 5. Запись на прямую без DMA Пожалуйста если можно помогите. (Я новичек - первый проект на STM) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arhiv6 20 10 сентября, 2016 Опубликовано 10 сентября, 2016 · Жалоба Выкладывайте код. Интересует инициализация UART. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimon_rub 0 10 сентября, 2016 Опубликовано 10 сентября, 2016 (изменено) · Жалоба Вод код инициализации UART1 void USART1_UART_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; NVIC_Configuration(); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); /* Configure USART1 Tx (PA.09) as alternate function push-pull */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); /* Configure USART1 Rx (PA.10) as input floating */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); USART1_.USART_BaudRate = 9600; USART1_.USART_WordLength = USART_WordLength_8b; USART1_.USART_StopBits = USART_StopBits_1; USART1_.USART_Parity = USART_Parity_No; USART1_.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART1_.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_Init(USART1, &USART1_); USART_Cmd(USART1, ENABLE); } Изменено 10 сентября, 2016 пользователем IgorKossak [codebox] для длинного кода, [code] - для короткого! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arhiv6 20 10 сентября, 2016 Опубликовано 10 сентября, 2016 · Жалоба Вроде всё нормально. Покажите как настраиваете тактирование. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimon_rub 0 10 сентября, 2016 Опубликовано 10 сентября, 2016 (изменено) · Жалоба Инициализация void init_(void) { RCC_DeInit(); RCC_HSEConfig(RCC_HSE_ON); ErrorStatus HSEStartUpStatus; HSEStartUpStatus = RCC_WaitForHSEStartUp(); if (HSEStartUpStatus == SUCCESS){ FLASH->ACR |= FLASH_ACR_PRFTBE;// Включаем буфер предвыборки FLASH FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); // Конфигурируем Flash на 2 цикла ожидания FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2; // Конфигурируем Flash на 2 цикла ожидания RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1; // HCLK = SYSCLK RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1; // PCLK2 = HCLK RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2; // PCLK1 = HCLK RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL8); RCC->CR |= RCC_CR_PLLON; while((RCC->CR & RCC_CR_PLLRDY) == 0) {/* Ждем*/} // Ожидаем, пока PLL выставит бит готовности /* Выбираем PLL как источник системной частоты */ RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL; /* Ожидаем, пока PLL выберется как источник системной частоты */ while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08) {/* Ждем*/} //RCC->CFGR |= RCC_CFGR_ADCPRE_DIV6; // Предделитель АЦП //RCC->CFGR |= RCC_CFGR_ADCPRE_DIV4; // Предделитель АЦП RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE); } else { } } Изменено 10 сентября, 2016 пользователем IgorKossak [codebox] для длинного кода, [code] - для короткого! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arhiv6 20 10 сентября, 2016 Опубликовано 10 сентября, 2016 · Жалоба RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL8); - тактируемся от HSE (16МГц), в PLL умножаем на 8 = 128МГц. Или умножайте на 4, или включите предделитель PLLXTPRE (HSE divider for PLL entry). Хотя странно, что МК вообще заработал - для SYSCLK максимальная частот 72МГц. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimon_rub 0 10 сентября, 2016 Опубликовано 10 сентября, 2016 · Жалоба Добавил RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL4); Но это ничего не дает. В старой конфигурации при выполнении функции RCC_GetClocksFreq(&RCC_ClockFreq); показывала частоту 64. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arhiv6 20 10 сентября, 2016 Опубликовано 10 сентября, 2016 (изменено) · Жалоба Теперь Вы входной сигнал поделили на 2 (RCC_CFGR_PLLXTPRE), потом умножили на 4. Итого = 32 МГц. Должно быть: RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL4); или RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL8); А функция RCC_GetClocksFreq может вернуть ошибочное значение, если установлено неправильное значение в дефайне HSE_VALUE. У Вас что записано в HSE_VALUE? Изменено 10 сентября, 2016 пользователем arhiv6 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimon_rub 0 10 сентября, 2016 Опубликовано 10 сентября, 2016 · Жалоба Стояло HSE_VALUE= 8000000 исправил. Сейчас строка в инициализации стоит RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL9); По идее 72. Но проблема не уходит. При выборе в термина 9600 ероглифы при выборе 19200 нормальный тест Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gerber 8 10 сентября, 2016 Опубликовано 10 сентября, 2016 · Жалоба "Типовым" значением кварца для данного контроллера является 8 МГц, у вас 16 МГц, и скорость выше в 2 раза тоже. Поэтому вероятно где-то ещё фигурирует "типовое" значение 8 МГц в виде константы, без использования HSE_VALUE. Особенно внимательно посмотрите часть, где вычисляются делители UART DIV_Fraction и DIV_Mantissa. Может, там потеря бита, переполнение при вычислении или что-то в этом духе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
seniorandre 0 10 сентября, 2016 Опубликовано 10 сентября, 2016 · Жалоба Я тоже один раз над по первости весь лоб расшиб, когда у меня тактовая не совпадала, ситуация была аналогична. Оказалось что код инициализации тактовой частоты просто не вызывался. В main() надо было прописать SysnemInit() Это когда я пользовал SPL и стандартные заготовки CoCox. Вы вообще отладчиком попадаете в код который отвечает за инициализацию? А то ведь startup файлы которые вызывают SystemInit(), а есть которые не вызывают и его надо вызвать в Main() лапами. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Eugen 0 10 сентября, 2016 Опубликовано 10 сентября, 2016 · Жалоба Здравствуйте. 2 день бьюсь с этой проблемой. Вопрос в следующем на при включении терминала и просмотре посылок от STM32 скорость нужно выбирать в 2 раза больше. Почему не понятно. Пробовал понижать/увеличивать частоты - не помогает. 1. STM32F103RC 2. USART1. 3. PPR2 = 64MHz (здесь изменял частоты) 4. Внешний кварц - 16MHz 5. Запись на прямую без DMA Пожалуйста если можно помогите. (Я новичек - первый проект на STM) Есть два варианта 1. настроена неправильно частота процессора ( проверить вывести на MCO , также надо понимать что у st есть несколько частот SYSCLK APB1(USART2....) APB2(USART1) и они разные ) 2. USART1 неправильно настроен так как он работает от другой шины - проверить USARTDIV = DIV_Mantissa + (DIV_Fraction / 16) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimon_rub 0 10 сентября, 2016 Опубликовано 10 сентября, 2016 · Жалоба ВЫ БИЛИ ПРАВЫ. На шел числовое значение. ВСЕМ ОГРОМНОЕ СПАСИБО Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RusikOk 1 11 сентября, 2016 Опубликовано 11 сентября, 2016 · Жалоба пользуйтесь кубом Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 11 сентября, 2016 Опубликовано 11 сентября, 2016 · Жалоба пользуйтесь кубомЛучше головой ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться