[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                                                               */
  };

В даташите ничего об этом не сказано, и о чюдо! даже на схеме клоков эта настройка не отражена!
видимо для многих является откровением что на заборе может быть написано х.. а там дрова...
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

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. 9th, 2026 07:04 pm
Powered by Dreamwidth Studios