Страница 12 из 12

Re: Таймер не работает

Добавлено: Вт дек 17, 2019 09:57:21
VladislavS
[uquote="TEPEM",url="/forum/viewtopic.php?p=3757402#p3757402"]где вы берете волшебные слова, которыми подменяете волшебные цифры для наглядности?[/uquote]Изначально в RM. Там расписаны все регистры и биты в них. Ну а затем ищешь их в заголовочном файле микропроцессора. В твоём случае stm32f412zx.h. Вот надо тебе содержимое RCC->CR расписать. Ищещь RCC_CR в заголовочном файле и там же будут все его биты определены.

Re: Таймер не работает

Добавлено: Вт дек 17, 2019 10:02:26
TEPEM
Спасибо Вам большое!

Сопоставляю пример, труды какого то деятеля из интернета и референс, вот интересная штука
Цитата "" Для этого пишем в регистр Volatile Enhanced Configuration Register, что мы именно это и хотим; при этом не забывая, что для любой записи, будь то в регистр конфига или массив памяти, нужна команда-открывашка Write Enable (WREN):"

Что бы это могло значить?

Re: Таймер не работает

Добавлено: Ср дек 18, 2019 05:16:05
TEPEM
Там в либе, кроме основных битов _0 _1 и тд, есть пустые, без номера бита и _msk, _pos не подскажите для чего это?

Re: Таймер не работает

Добавлено: Ср дек 18, 2019 06:31:04
VladislavS
Для макросов _VAL2FLD и _FLD2VAL.

Re: Таймер не работает

Добавлено: Ср дек 18, 2019 13:35:37
TEPEM
В функции объявляю переменную, надо ее обнулять или с новым вызовом функции она обновится?

Re: Таймер не работает

Добавлено: Ср дек 18, 2019 13:43:18
VladislavS
Надо конечно. Локальные переменные создаются на стеке неинициализированными.

Re: Таймер не работает

Добавлено: Чт дек 19, 2019 01:26:43
TEPEM
У меня камень виснет в хард при попытке считать в переменную содержимое адреса памяти(
qi = *(__IO uint32_t*)0x90000000;

и так в хард фаулт
for(uint16_t iw = 0; iw < 2; iw++)
{
uint16_t dig16 = *(uint16_t*)address;
address = address + 2;
}

Re: Таймер не работает

Добавлено: Чт дек 19, 2019 07:41:25
VladislavS
Что у тебя по этому адресу расположено?

Re: Таймер не работает

Добавлено: Чт дек 19, 2019 09:33:37
TEPEM
Qspi
от 0х90000000 и выше

Re: Таймер не работает

Добавлено: Чт дек 19, 2019 10:06:59
VladislavS
Ну значит не взлетел.

Re: Таймер не работает

Добавлено: Чт дек 19, 2019 12:17:20
240265
Ребят , Вы телефонами не пробовали обменяться. Или вы количество постов набиваете ?

Re: Таймер не работает

Добавлено: Пт дек 20, 2019 11:21:44
TEPEM
Кто то может расшифровать это?
MODIFY_REG(hqspi->Instance->CR,(QUADSPI_CR_FSEL_Msk ), ((hqspi->Init.ClockPrescaler << 24U)| hqspi->Init.SampleShifting | hqspi->Init.FlashID));

Re: Таймер не работает

Добавлено: Пт дек 20, 2019 11:30:15
VladislavS
#define MODIFY_REG(REG, CLEARMASK, SETMASK) WRITE_REG((REG), (((READ_REG(REG)) & (~(CLEARMASK))) | (SETMASK)))

Re: Таймер не работает

Добавлено: Сб дек 21, 2019 13:57:36
TEPEM
[del]

Re: Таймер не работает

Добавлено: Ср янв 01, 2020 18:17:26
TEPEM
Правда можно записать весь экран одной командой перечисляя цвет текущего пикселя, вы как всегда были правы)

Re: Таймер не работает

Добавлено: Пт авг 09, 2024 22:59:21
perelep
Немного запутался с инициализацией HSE...STM32F401RCT6, кварц 25МГц
Пытаюсь сделать так:

Код: Выделить всё

#include "stm32f4xx.h"

#define PLL_M  25
#define PLL_N  336
#define PLL_P   4
#define PLL_Q   7

#define LED_TOGGLE                         (GPIOC->ODR ^= GPIO_ODR_ODR_13)
#define RCC_PLLCFGR_PLLP_DIV4              (0x1U << RCC_PLLCFGR_PLLP_Pos)
#define RCC_CFGR_MCO2_HSE                  (0x2U << RCC_CFGR_MCO2_Pos)
#define RCC_CFGR_MCO2PRE_DIV1              (0x0U << RCC_CFGR_MCO2PRE_Pos)
#define RCC_CFGR_MCO1PRE_DIV1              (0x0U << RCC_CFGR_MCO1PRE_Pos)
#define RCC_CFGR_I2SSRC_PLLI2S             (0x0U << RCC_CFGR_I2SSRC_Pos)
#define RCC_CFGR_MCO1_HSE                  (0x2U << RCC_CFGR_MCO1_Pos)

void LED_PC13_init(){
    RCC->AHB1ENR |= RCC_AHB1ENR_GPIOCEN;
    GPIOC->MODER |= GPIO_MODER_MODER13_0;
}

void TIM3_init(){

    NVIC_DisableIRQ(TIM3_IRQn);
    RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;
    TIM3->CR1 |= TIM_CR1_CEN;
    TIM3->CR1 |= TIM_CR1_ARPE;
    TIM3->DIER |= TIM_DIER_UIE;
    TIM3->EGR |= TIM_EGR_UG;
    TIM3->SR &= ~TIM_SR_UIF;
    TIM3->CNT = 0;
    TIM3->PSC = 83999;
    TIM3->ARR = 999;
    NVIC_SetPriority(TIM3_IRQn,8);
    NVIC_EnableIRQ(TIM3_IRQn);

}

void TIM3_IRQHandler(){

    TIM3->SR =~0x01;
    LED_TOGGLE;
}

static void SystemClock_Config(){
    FLASH->ACR =    FLASH_ACR_PRFTEN | 
                    FLASH_ACR_ICEN | 
                    FLASH_ACR_DCEN | 
                    FLASH_ACR_LATENCY_3WS;
    RCC->CR =       _VAL2FLD(RCC_CR_HSITRIM,16) |
                    RCC_CR_HSION | 
                    RCC_CR_HSEON;
    while(!(RCC->CR & RCC_CR_HSERDY));

    RCC->PLLCFGR &= ~(RCC_PLLCFGR_PLLM_Msk |
                    RCC_PLLCFGR_PLLN_Msk |
                    RCC_PLLCFGR_PLLP_Msk);
                    
    RCC->PLLCFGR =  RCC_PLLCFGR_PLLSRC_HSE |
                    _VAL2FLD(RCC_PLLCFGR_PLLQ,7) |
                    _VAL2FLD(RCC_PLLCFGR_PLLN,336) |
                    _VAL2FLD(RCC_PLLCFGR_PLLM,25) |
                    //_VAL2FLD(RCC_PLLCFGR_PLLP,1);
                    RCC_PLLCFGR_PLLP_DIV4;

    RCC->CR =       _VAL2FLD(RCC_CR_HSITRIM,16) | 
                    RCC_CR_HSION | 
                    RCC_CR_HSEON | 
                    RCC_CR_PLLON;

    while(!(RCC->CR & RCC_CR_PLLRDY));

    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;

    RCC->CR =       _VAL2FLD(RCC_CR_HSITRIM,16) | 
                    RCC_CR_HSEON | 
                    RCC_CR_PLLON;

    SystemCoreClockUpdate();
}

int main(){
    SystemClock_Config();
    LED_PC13_init();
    TIM3_init();
    while(1){
    }
}
Хочу чтоб таймер каждую сек прерывание генерил. А на деле вместо 1 сек выходит 220мсек
В чем начесался?

Re: Таймер не работает

Добавлено: Вс авг 11, 2024 08:41:55
perelep
PSC. Вот тут и проблема была, пофиксил.