[identity profile] vkorehovisback.livejournal.com posting in [community profile] engineering_ru
Одна интересная особенность BlueNRG-1, которая не отражена в документации.
Заставила долго "попотеть".

Вот простейший код, основанный на коде примера:
Project\BlueNRG1_Periph_Examples\Micro\Hello_World
/**
  * @brief  Main program.
  * @param  None
  * @retval None
  */
int main(void)
{
  uint32_t counter = 0; 
  /* System initialization function */
  SystemInit();
  UART->CR_b.OVSFACT = 0;
  
  /* Identify BlueNRG1 platform */
  SdkEvalIdentification();
  
  /* UART initialization */
  SdkEvalComUartInit(UART_BAUDRATE);
  
  /* infinite loop */
  while(1) 
  {
    if (counter == 0 )
      printf("A");
    counter = (counter +1) % 0xFFFFF;
  }  
}


Заливаем, подключаем FTDI, смотрим в Putty, и получаем иероглифы...
Что не так? в интернете находим методику, как определить скорость UART, осциллографом:
https://www.kumari.net/index.php/random/37-determing-unknown-baud-rate

при печати буквы А, видны два коротких импульса, замеряем ширину одного из них, получаем 208мс:

Из таблицы по ссылке выше это 4800 бод, а не 9600.

Дальше проверяем, что-же пошло не так?
Находим вот такие настройки делителей клока UART в даташите:

Дебуггером находим код библиотеки:
  divider = (UART_CLOCK<<7) / (16 * UART_InitStruct->UART_BaudRate);
  
  ibrd = divider >> 7;
  UART->IBRD = ibrd;
  fbrd = ((divider - (ibrd <<7) + 1) >> 1);
  if (fbrd > 0x3f) {
    ibrd++;
    fbrd = (fbrd - 0x3F) & 0x3F;
  }
  UART->FBRD = fbrd;

Дебуггер показывает, что ibrd и fbrd значения соответствуют таблице.

Что же с OVSFACT ?? в коде библотеки BlueNRG1 он нигде не трогается.
ради интереса, печатаем, его значение, получаем 0...
UART->CR_b.OVSFACT


Что же произошло? пробуем найти в документации, можно ли менять частоту клока? UARTCLOCK но в документации снова ничего нету...
в коде стоит просто константа:

/** @defgroup UART_Private_Defines Private Defines
  * @{
  */
#define UART_CLOCK       (16000000)

Однако похоже у нас по факту он равен 8000000
Что же это может быть?
И тут я заметил, что у меня подтянут DIO7 к VDD, и что дебуг ведется после бутлоадера. Возможно бутлоадер "пачкает" настройки UART так-как сам его использует тоже...
Пробуем подключить DIO7 к земле, перезагружаем устройство.
Так и есть, скорость теперь в норме: 9600...
Однако после бутлоадера изменить скорость возможности никакой нету...
Все "официальные" настройки я проверил, возможно бутлоадер изменяет какие-то недокументированные настройки...
это очевидный баг ST



UPDATE:
Поскольку тут налетела толпа невежд, кто-то утверждает что клок UART изменить нельзя, кто-то указывает на схему клока и говорит что можно, при этом не говорит как именно его изменить...
Специально по заявкам таких телезрителей, привожу кусок из заголовочного файла BlueNRG1
typedef struct {                                    /*!< CKGEN_SOC Structure                                                   */
  
  union {
    __IO uint32_t  CONTROL;                         /*!< Control clock and reset of SOC                                        */
    
    struct {
           uint32_t             : 10;
      __IO uint32_t  UART_CKDIV :  4;               /*!< UART baud rate clock setting from 1 to 16 MHz according to the
                                                         formula 16 / (n + 1) MHz.                                             */
    } CONTROL_b;                                    /*!< BitSize                                                               */
  };

В даташите ничего об этом не сказано, и о чюдо! даже на схеме клоков эта настройка не отражена!
видимо для многих является откровением что на заборе может быть написано х.. а там дрова...

Date: 2017-12-23 10:55 am (UTC)
From: [identity profile] alex-avr2.livejournal.com
Что же произошло? пробуем найти в документации, можно ли менять частоту клока? UARTCLOCK но в документации снова ничего нету...
в коде стоит просто константа:

/** @defgroup UART_Private_Defines Private Defines
* @{
*/
#define UART_CLOCK (16000000)


Однако похоже у нас по факту он равен 8000000
Что же это может быть?


UART_CLOCK - никак не влияет на частоту тактирования UART. Наоборот, это значение, которое ВЫ должны задать, для правильного расчета делителей.
Так что это к вам вопрос, какая у вас частота тактирования UART и почему в вашей программе она не соответствует действительности.

Date: 2017-12-23 11:42 am (UTC)
From: [identity profile] nero-schwarz.livejournal.com
я просто балдею с этого автора уже в который раз. Руки кривые до невозможности, но виноват в очередной раз производитель!%))
Edited Date: 2017-12-23 11:43 am (UTC)

Date: 2017-12-23 12:16 pm (UTC)
From: [identity profile] andrey-yurin.livejournal.com
С некоторых пор я чуваков в отсеке за фразу "да это что-то комп глючит" начал бить по рукам и кричать на них матом. Потому как очень легко свой косяк списать на непонятно кого. И очень удобно получается - работа не сделана и никто в этом не виноват. Ну т.е. изделие мы не закрываем, но денюжку нам заплатите. Удобно? Очень.

Не, понятно, что бывает Errata. Понятно, что ошибки возможны. И бывает, что среда разработки действительно вытворяет что-то непонятное (особый привет пользователям Eclipse). Но это бывает гораздо реже, чем собственная невнимательность. Что по мне, то искать в каждом собственном баге ошибку производителя несколько странно. Лучше уж задаться сначала вопросом: "а может я чего-то не понимаю"? Это вот первая мысль, которая у меня обычно возникает. Потом разбираешься - действительно. Так и есть. И через год-полтора вдруг выясняется, что при таком подходе куча детских ошибок куда-то пропадает. А адепты секты: "это глючит комп" как делали ошибки нелепые так и продолжают их делать.

Date: 2017-12-23 04:25 pm (UTC)
From: [identity profile] simsun.livejournal.com
> Лучше уж задаться сначала вопросом: "а может я чего-то не понимаю"? Это вот первая мысль, которая у меня обычно возникает.

не смотря на юзерпик и пятницу вчера, всё же хочу заметить, что этот подход и в целом по жизни очень помогает :)

Date: 2017-12-23 02:37 pm (UTC)
From: [identity profile] alex-avr2.livejournal.com
Вы разрабатываете устройство? Вы и разбирайтесь в схеме тактирования модулей. Раздел 3.5 на странице 21 даташита вам поможет. Схема тактирования в этом контроллере банальнейшая.

(no subject)

From: [identity profile] nero-schwarz.livejournal.com - Date: 2017-12-23 03:07 pm (UTC) - Expand

(no subject)

From: [identity profile] alex-avr2.livejournal.com - Date: 2017-12-23 03:08 pm (UTC) - Expand

(no subject)

From: [identity profile] alex-avr2.livejournal.com - Date: 2017-12-23 03:19 pm (UTC) - Expand

(no subject)

From: [identity profile] alex-avr2.livejournal.com - Date: 2017-12-23 03:29 pm (UTC) - Expand

(no subject)

From: [identity profile] alex-avr2.livejournal.com - Date: 2017-12-23 03:33 pm (UTC) - Expand

(no subject)

From: [identity profile] alex-avr2.livejournal.com - Date: 2017-12-23 03:45 pm (UTC) - Expand

(no subject)

From: [identity profile] nero-schwarz.livejournal.com - Date: 2017-12-23 06:05 pm (UTC) - Expand

(no subject)

From: [identity profile] nero-schwarz.livejournal.com - Date: 2017-12-23 03:25 pm (UTC) - Expand

(no subject)

From: [identity profile] nero-schwarz.livejournal.com - Date: 2017-12-23 03:34 pm (UTC) - Expand

(no subject)

From: [identity profile] nero-schwarz.livejournal.com - Date: 2017-12-23 04:01 pm (UTC) - Expand

(no subject)

From: [identity profile] nero-schwarz.livejournal.com - Date: 2017-12-23 03:32 pm (UTC) - Expand

(no subject)

From: [identity profile] nero-schwarz.livejournal.com - Date: 2017-12-23 03:35 pm (UTC) - Expand

Date: 2017-12-23 02:38 pm (UTC)
From: [identity profile] alex-avr2.livejournal.com
Нет. Это абсолютно стандартная практика.

(no subject)

From: [identity profile] alex-avr2.livejournal.com - Date: 2017-12-23 02:56 pm (UTC) - Expand

(no subject)

From: [identity profile] nero-schwarz.livejournal.com - Date: 2017-12-23 03:03 pm (UTC) - Expand

(no subject)

From: [identity profile] alex-avr2.livejournal.com - Date: 2017-12-23 03:13 pm (UTC) - Expand

Date: 2017-12-23 02:41 pm (UTC)
From: [identity profile] nero-schwarz.livejournal.com
не влияет. Частота задана хардварно осциллятором. А в коде надо прописать какая у вас частота.

(no subject)

From: [identity profile] nero-schwarz.livejournal.com - Date: 2017-12-23 02:58 pm (UTC) - Expand

(no subject)

From: [identity profile] nero-schwarz.livejournal.com - Date: 2017-12-23 03:16 pm (UTC) - Expand

Date: 2017-12-23 12:41 pm (UTC)
From: [identity profile] nero-schwarz.livejournal.com
Вы читать умеете? Вот это под описанием таблицы: "shows some typical bit rates and their corresponding divisors when OVSFACT = 0b, given the UART clock frequency of 16 MHz". Таблица дана для 16MHz.

У вас чему UART_CLOCK равен? 8 МHz? Вы сами этого не знаете? Так сначала разберитесь и пропишите правильно UART_CLOCK.

Date: 2017-12-23 02:37 pm (UTC)
From: [identity profile] nero-schwarz.livejournal.com
Вот так и прописать, раз она у вас 8MHz почему-то!

#define UART_CLOCK (8000000)
(screened comment)

(no subject)

From: [identity profile] alex-avr2.livejournal.com - Date: 2017-12-23 02:56 pm (UTC) - Expand

Date: 2017-12-23 02:38 pm (UTC)
From: [identity profile] alex-avr2.livejournal.com
как прописать UART_CLOCK


#define UART_CLOCK (16000000)

(no subject)

From: [identity profile] nero-schwarz.livejournal.com - Date: 2017-12-23 03:37 pm (UTC) - Expand

Date: 2017-12-23 12:52 pm (UTC)
From: [identity profile] grieverrr.livejournal.com
комментарии (в коде) огонь

Date: 2017-12-24 03:55 am (UTC)
From: [identity profile] Виктор Жигулин (from livejournal.com)
Слово "чудо" пишется через "У". Ну это я так...

Date: 2017-12-24 05:01 pm (UTC)
From: [identity profile] karlson-rwa.livejournal.com
У меня вопрос к админам: зачем пропускать посты этого чуда, которое не умеет читать доки и всегда и во всем винит производителя? При этом отчаянно хамит в комментах. Вот зачем оно здесь?

Date: 2017-12-27 02:51 am (UTC)

Date: 2017-12-26 12:01 am (UTC)
From: [identity profile] alexey prokopyev (from livejournal.com)
А кто знает, где найти на BlueNRG-1 еррату? На офсайте только для MS нашел

Profile

engineering_ru: (Default)
Инженерия

December 2025

S M T W T F S
 123456
78910111213
14151617181920
2122232425 2627
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 8th, 2026 07:57 am
Powered by Dreamwidth Studios