|
STN32F107 SYSCLK = 72 MHz, частота USART1 |
|
|
|
Nov 18 2013, 20:03
|

Профессионал
    
Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634

|
Цитата Вот код, имеющийся в сухом остатке. Кто подскажет что не так? Вам уже советовали - замените магические числа на именованные константы. Я посчитал битики и нашёл ошибку, которой могло бы не быть, если Вы бы пользовались родными #define. Цитата А вот это что такое? Код arm_hardware_pioa_periphout_altfn2(GPIO_ODR_ODR9, 255); // TX DATA line (2 MHz) arm_hardware_pioa_inputs(GPIO_ODR_ODR10); // RX data line Вот просто rocket sience... Как Вы вообще программированием занимаетесь? Ну не обращайте внимания на второстеепнные для понимания вещи... У Вас в программе есть аналогичный кусок, только он настроен на работу с двумя битами в PIOA, это универсальные функциии... Если что, исходник лежит вот тут https://188.134.5.254/export/616/trunk/hardware.c - строка 2600 и 1320 И что за пляски со status register? Сделайте прямо: Код while ((USART1->SR & USART_SR_TXE) == 0) ; USART1->DR = c;
Сообщение отредактировал Genadi Zawidowski - Nov 18 2013, 20:20
|
|
|
|
|
Nov 24 2013, 14:09
|
Гуру
     
Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446

|
Посмотрел ситуацию с тактированием. Получается так. Если идти пошагово до main, то с тактированием подядок. 72 МГц на усарте есть. Если же запускать "run to9 main" или просто с отключенным программатором, то на усарте 8 МГц. Т.е. тактирование не настраивается. В чем может быть дело? Раньше с подобным не сталкивался. Прочитать регистры ни программатором ни с помощью r = RCC->CFGR; не удается. Только если пошагово пройтись, то они видны. Помогите понять ситуацию. Спасибо. Ну вобщем разобрался. Вот тут выходил по таймауту. Код /* Wait till HSE is ready and if Time out is reached exit */ do { HSEStatus = RCC->CR & RCC_CR_HSERDY; StartUpCounter++; } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); Если в строке увеличить значениетаймаута, то все в порядке. Код #define HSE_STARTUP_TIMEOUT ((uint16_t)0xffff) /*0x0500!< Time out for HSE start up */ Хотелось бы знать почему HSE не выходит на готовность вовремя? Кейловцы же из чего-то исходили перед тем как записать значение 0х0500. Внесем ясность в это дело и тему можно закрывать.
--------------------
Живи днем так, чтобы ночью ты спал спокойно.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|