Чт апр 15, 2021 20:33:49
Чт апр 15, 2021 20:44:07
Чт апр 15, 2021 22:25:11
Сб апр 17, 2021 09:57:59
Сб апр 17, 2021 17:03:07
RCC_ClocksTypeDef RCC_Clocks;
RCC_GetClocksFreq (&RCC_Clocks);
Вс апр 18, 2021 19:24:39
RCC_ClocksTypeDef RCC_Clocks;
RCC_GetClocksFreq (&RCC_Clocks);
Вс апр 18, 2021 22:05:42
Как ругается?ivan dimir писал(а):на жто компелятор ругается
#include <stm32f4xx_rcc.h>
RCC_PLLCFGR_PLLP
AHB Prescaler
APB2 Prescaler
Пн апр 19, 2021 06:48:52
Пн апр 19, 2021 09:55:15
USART1->CR1 |= USART_CR1_RXNEIE;
NVIC_EnableIRQ (USART1_IRQn);
void UsartInit(uint16_t baud)
{
USART1->BRR = (uint16_t)baud;
USART1->CR1 |= USART_CR1_TE | USART_CR1_RE | USART_CR1_UE;
USART1->CR2 = 0;
USART1->CR3 = 0;
}
void nast_uart(void)
{ uint16_t i;
for( i=100; i<0xFFF0; i++ )
{
UsartInit(i);
tx_uart1 (0x0a); tx_uart1 (0x0d);
tx_uart1 ('K');tx_uart1 ('O');tx_uart1 ('D');tx_uart1 ('=');
tx_uart1 ((i/10000)%10+0x30);
tx_uart1 ((i/1000)%10+0x30);
tx_uart1 ((i/100)%10+0x30);
tx_uart1 ((i/10)%10+0x30);
tx_uart1 ((i/1)%10+0x30);
tx_uart1 (0x0a); tx_uart1 (0x0d);
}
}
timer6_init();
//ds18b20_init();
USART1_init();
nast_uart(); ////////////////////
// adc_init();
I2C_Init();
Вс июл 25, 2021 15:22:14
Вс июл 25, 2021 18:56:42
Там на рисунке есть PLL и что такое R я не нашол
Вс июл 25, 2021 20:04:11
Пн июл 26, 2021 09:00:42
ComPort UART_base::open
(
ComPort _port,
uint32 _baudRate,
uint8 _dataBits,
Parity _parity,
StopBits _stopBits
)
{
switch( _port )
{
case COMPORT1:
{
usart = USART1;
break;
}
case COMPORT2:
{
usart = USART2;
break;
}
case COMPORT6:
{
usart = USART6;
break;
}
default:
{
usart = 0;
_port = UNKNOWNPORT;
break;
}
}
port = _port;
baudRate = _baudRate;
dataBits = _dataBits;
parity = _parity;
stopBits = _stopBits;
if
(
( port == UNKNOWNPORT ) ||
( usart == 0 )
)
{
return UNKNOWNPORT;
}
// ---- _baudRate ----
if( ( _baudRate == 0 ) || ( _baudRate > 921000UL ) )
{
lastError = INVALID_BAUDRATE;
return port;
}
// ---- _dataBits ----
if( _dataBits != 8 )
{
lastError = UNSUPPORTED_DATA_BITS_VALUE;
return port;
}
// Расчитаем делители частоты УАРТа.
// Определим частоту тактирования шины, к которой подключен УАРТ.
switch( port )
{
case COMPORT1: // Этот порт подключен к APB2.
{
APB_n = 2;
usart_IRQn = USART1_IRQn;
// Извлечём делитель частоты,
APB_divider = ( RCC -> CFGR >> RCC_CFGR_PPRE2_Pos ) & 0x07;
taskENTER_CRITICAL();
{
// Включаеи тактирование порта.
RCC -> APB2ENR |= RCC_APB2ENR_USART1EN;
}
taskEXIT_CRITICAL();
break;
}
case COMPORT2: // Этот порт подключен к APB1.
{
APB_n = 1;
usart_IRQn = USART2_IRQn;
// Извлечём делитель частоты,
APB_divider = ( RCC -> CFGR >> RCC_CFGR_PPRE1_Pos ) & 0x07;
taskENTER_CRITICAL();
{
// Включаеи тактирование порта.
RCC -> APB1ENR |= RCC_APB1ENR_USART2EN;
}
taskEXIT_CRITICAL();
break;
}
case COMPORT6: // Этот порт подключен к APB2.
{
APB_n = 2;
usart_IRQn = USART6_IRQn;
// Извлечём делитель частоты,
APB_divider = ( RCC -> CFGR >> RCC_CFGR_PPRE2_Pos ) & 0x07;
taskENTER_CRITICAL();
{
// Включаеи тактирование порта.
RCC -> APB2ENR |= RCC_APB2ENR_USART6EN;
}
taskEXIT_CRITICAL();
break;
}
default:
{
lastError = INVALID_PORT;
return port;
}
}
// Сбросим все конфигурационные биты. По ходу разбора параметров будем
// выставлять нужные.
usart -> CR1 = \
usart -> CR2 = \
usart -> CR3 = 0;
// Преобразуем код делителя в число.
switch( APB_divider )
{
case 0x0: // 000b
case 0x1: // 001b
case 0x2: // 010b
case 0x3: // 011b
{
// Без делителя, напрямую.
APB_divider = 1;
break;
}
case 0x4: // 100b
{
APB_divider = 2;
break;
}
case 0x5: // 101b
{
APB_divider = 4;
break;
}
case 0x6: // 110b
{
APB_divider = 8;
break;
}
case 0x7: // 111b
{
APB_divider = 16;
break;
}
}
uint32
floor = SystemCoreClock / ( APB_divider * (uint32)_baudRate * 16UL );
int32
frac =
(
( SystemCoreClock / APB_divider ) -
( (uint32)_baudRate * floor * 16UL )
) / 200L,
fracfrac = frac % 100L;
frac /= 100L;
if( fracfrac > 50 )
{
++frac;
}
usart -> BRR = ( floor << 4 ) | frac; // Выставили делитель.
// ---- parity ----
switch( _parity )
{
case NO_PARITY:
{
break;
}
case ODD: // Нечётность
{
usart -> CR1 |=
(
USART_CR1_PCE | // Разрешение контроля чётности-нечётности.
USART_CR1_M | // Длина символа 9 бит.
USART_CR1_PS // Работаем с признаком нечётности.
);
break;
}
case PARITY: // Чётность
{
usart -> CR1 |=
(
USART_CR1_PCE | // Разрешение контроля чётности-нечётности.
USART_CR1_M // Длина символа 9 бит.
);
break;
}
default:
{
return port;
}
}
// ---- stopBits ----
// 00 — 1 бит, 01 — 0.5 бит, 10 — 2 бит, 11 — 1.5 бит;
switch( _stopBits )
{
case ONE_STOP_BIT:
{
break;
}
case ONE_AND_HALF_STOP_BIT:
{
usart -> CR2 |= USART_CR2_STOP;
break;
}
case TWO_STOP_BITS:
{
usart -> CR2 |= USART_CR2_STOP_1;
break;
}
default:
{
lastError = UNSUPPORTED_STOP_BITS_VALUE;
return port;
}
}
purgeTxBuff();
purgeRxBuff();
usart -> SR = 0;
setEvents(); // Разрешаем нужные нам прерывания.
return( port );
}
Пн июл 26, 2021 18:37:57
Пн июл 26, 2021 19:03:40
по ходу дела выбранный вами проц не вытягивает ваш код, то есть слабоват будет.ivan dimir писал(а):stm32f407
Вт июл 27, 2021 08:16:37
Dimon456 писал(а):по ходу дела выбранный вами проц не вытягивает ваш код, то есть слабоват будет.
#define RCC_PLLCFGR_PLLP_div2 (0x0U << RCC_PLLCFGR_PLLP_Pos) /*!< 0x00000000 */
#define RCC_PLLCFGR_PLLP_div4 (0x1U << RCC_PLLCFGR_PLLP_Pos) /*!< 0x00010000 */
#define RCC_PLLCFGR_PLLP_div6 (0x2U << RCC_PLLCFGR_PLLP_Pos) /*!< 0x00020000 */
#define RCC_PLLCFGR_PLLP_div8 (0x3U << RCC_PLLCFGR_PLLP_Pos) /*!< 0x00030000 */
#define RCC_CFGR_MCO2_SYSCLK (0x0U << RCC_CFGR_MCO2_Pos)
#define RCC_CFGR_MCO2_PLLI2S (0x1U << RCC_CFGR_MCO2_Pos)
#define RCC_CFGR_MCO2_HSE (0x2U << RCC_CFGR_MCO2_Pos)
#define RCC_CFGR_MCO2_PLL (0x3U << RCC_CFGR_MCO2_Pos)
#define RCC_CFGR_MCO2PRE_div1 (0x0U << RCC_CFGR_MCO2PRE_Pos)
#define RCC_CFGR_MCO2PRE_div2 (0x4U << RCC_CFGR_MCO2PRE_Pos)
#define RCC_CFGR_MCO2PRE_div3 (0x5U << RCC_CFGR_MCO2PRE_Pos)
#define RCC_CFGR_MCO2PRE_div4 (0x6U << RCC_CFGR_MCO2PRE_Pos)
#define RCC_CFGR_MCO2PRE_div5 (0x7U << RCC_CFGR_MCO2PRE_Pos)
#define RCC_CFGR_MCO1PRE_div1 (0x0U << RCC_CFGR_MCO1PRE_Pos)
#define RCC_CFGR_MCO1PRE_div2 (0x4U << RCC_CFGR_MCO1PRE_Pos)
#define RCC_CFGR_MCO1PRE_div3 (0x5U << RCC_CFGR_MCO1PRE_Pos)
#define RCC_CFGR_MCO1PRE_div4 (0x6U << RCC_CFGR_MCO1PRE_Pos)
#define RCC_CFGR_MCO1PRE_div5 (0x7U << RCC_CFGR_MCO1PRE_Pos)
#define RCC_CFGR_I2SSRC_PLLI2S (0x0U << RCC_CFGR_I2SSRC_Pos)
#define RCC_CFGR_I2SSRC_EXT (0x1U << RCC_CFGR_I2SSRC_Pos)
#define RCC_CFGR_MCO1_HSI (0x0U << RCC_CFGR_MCO1_Pos)
#define RCC_CFGR_MCO1_LSE (0x1U << RCC_CFGR_MCO1_Pos)
#define RCC_CFGR_MCO1_HSE (0x2U << RCC_CFGR_MCO1_Pos)
#define RCC_CFGR_MCO1_PLL (0x3U << RCC_CFGR_MCO1_Pos)
...
__disable_irq();
// Настройка FLASH
FLASH -> ACR = \
FLASH_ACR_PRFTEN |
FLASH_ACR_ICEN |
FLASH_ACR_DCEN |
FLASH_ACR_LATENCY_3WS;
// Тактирование ----------
// Включаем HSE = 8 MHz
RCC -> CR = _VAL2FLD(RCC_CR_HSITRIM,16) | RCC_CR_HSION | RCC_CR_HSEON;
while( !( RCC -> CR & RCC_CR_HSERDY ) )
{};
// Задаём источники тактирования и прескалеры SYSCLK = 96 МГц USB = 48 МГц
RCC -> PLLCFGR = \
RCC_PLLCFGR_PLLSRC_HSE |
_VAL2FLD( RCC_PLLCFGR_PLLQ, 4 ) |
_VAL2FLD( RCC_PLLCFGR_PLLN, 96 ) |
_VAL2FLD( RCC_PLLCFGR_PLLM, 4 ) |
RCC_PLLCFGR_PLLP_div2;
RCC -> CR = \
_VAL2FLD( RCC_CR_HSITRIM, 16 ) |
RCC_CR_HSION |
RCC_CR_HSEON |
RCC_CR_PLLON; //Включаем PLL
while( !( RCC -> CR & RCC_CR_PLLRDY ) )
{};
// Переключаемся на PLL с установленнными ранее прескалерами
RCC -> CFGR = \
RCC_CFGR_MCO2_HSE |
RCC_CFGR_MCO2PRE_div1 |
RCC_CFGR_MCO1PRE_div1 |
RCC_CFGR_I2SSRC_PLLI2S |
RCC_CFGR_MCO1_HSE |
_VAL2FLD( RCC_CFGR_RTCPRE, 8 ) |
RCC_CFGR_PPRE2_DIV1 |
RCC_CFGR_PPRE1_DIV2 |
RCC_CFGR_HPRE_DIV1 |
RCC_CFGR_SW_PLL;
SystemCoreClock = 96000000;
RCC-> CR = \
_VAL2FLD( RCC_CR_HSITRIM, 16 ) |
RCC_CR_HSEON |
RCC_CR_PLLON; // Выключаем HSI
Вт июл 27, 2021 17:25:37
Вт июл 27, 2021 17:43:09
у меня то ума хватит на этоivan dimir писал(а):Это писал такой же амматор как и я
либо этоa797945 писал(а):зациклите выдачу 0х55 в режиме 8n1 и замерьте частоту
а так же тупо нажать "паузу" в отладчике и выдернуть для анализа, после выполнения или разгона,Dimon456 писал(а):функция последовательно будет перебирать регистр USART1->BRR, пока не получите адекватную информацию в терминале.
содержимое регистровivan dimir писал(а):А настраиваю на PLL шину на скорость 168Мгц.
RCC->CR
RCC->PLLCFGR
Вт июл 27, 2021 17:54:58
Вт июл 27, 2021 20:16:25
tonyk писал(а):Читай комментарии и держи перед глазами описание SFR.