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

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

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

Сообщение VladislavS »

[uquote="TEPEM",url="/forum/viewtopic.php?p=3757402#p3757402"]где вы берете волшебные слова, которыми подменяете волшебные цифры для наглядности?[/uquote]Изначально в RM. Там расписаны все регистры и биты в них. Ну а затем ищешь их в заголовочном файле микропроцессора. В твоём случае stm32f412zx.h. Вот надо тебе содержимое RCC->CR расписать. Ищещь RCC_CR в заголовочном файле и там же будут все его биты определены.
Реклама
Аватара пользователя
TEPEM
Нашел транзистор. Понюхал.
Сообщения: 153
Зарегистрирован: Чт дек 05, 2019 16:28:11
Откуда: Самара

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

Сообщение TEPEM »

Спасибо Вам большое!

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

Что бы это могло значить?
Реклама
Аватара пользователя
TEPEM
Нашел транзистор. Понюхал.
Сообщения: 153
Зарегистрирован: Чт дек 05, 2019 16:28:11
Откуда: Самара

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

Сообщение TEPEM »

Там в либе, кроме основных битов _0 _1 и тд, есть пустые, без номера бита и _msk, _pos не подскажите для чего это?
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

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

Сообщение VladislavS »

Для макросов _VAL2FLD и _FLD2VAL.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
TEPEM
Нашел транзистор. Понюхал.
Сообщения: 153
Зарегистрирован: Чт дек 05, 2019 16:28:11
Откуда: Самара

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

Сообщение TEPEM »

В функции объявляю переменную, надо ее обнулять или с новым вызовом функции она обновится?
Реклама
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

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

Сообщение VladislavS »

Надо конечно. Локальные переменные создаются на стеке неинициализированными.
Реклама
Аватара пользователя
TEPEM
Нашел транзистор. Понюхал.
Сообщения: 153
Зарегистрирован: Чт дек 05, 2019 16:28:11
Откуда: Самара

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

Сообщение TEPEM »

У меня камень виснет в хард при попытке считать в переменную содержимое адреса памяти(
qi = *(__IO uint32_t*)0x90000000;

и так в хард фаулт
for(uint16_t iw = 0; iw < 2; iw++)
{
uint16_t dig16 = *(uint16_t*)address;
address = address + 2;
}
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

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

Сообщение VladislavS »

Что у тебя по этому адресу расположено?
Аватара пользователя
TEPEM
Нашел транзистор. Понюхал.
Сообщения: 153
Зарегистрирован: Чт дек 05, 2019 16:28:11
Откуда: Самара

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

Сообщение TEPEM »

Qspi
от 0х90000000 и выше
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

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

Сообщение VladislavS »

Ну значит не взлетел.
Аватара пользователя
240265
Электрический кот
Сообщения: 1029
Зарегистрирован: Сб мар 09, 2013 11:29:22
Откуда: 40RUS, Жуков

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

Сообщение 240265 »

Ребят , Вы телефонами не пробовали обменяться. Или вы количество постов набиваете ?
IVL ex UA6PJ
Аватара пользователя
TEPEM
Нашел транзистор. Понюхал.
Сообщения: 153
Зарегистрирован: Чт дек 05, 2019 16:28:11
Откуда: Самара

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

Сообщение TEPEM »

Кто то может расшифровать это?
MODIFY_REG(hqspi->Instance->CR,(QUADSPI_CR_FSEL_Msk ), ((hqspi->Init.ClockPrescaler << 24U)| hqspi->Init.SampleShifting | hqspi->Init.FlashID));
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

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

Сообщение VladislavS »

#define MODIFY_REG(REG, CLEARMASK, SETMASK) WRITE_REG((REG), (((READ_REG(REG)) & (~(CLEARMASK))) | (SETMASK)))
Аватара пользователя
TEPEM
Нашел транзистор. Понюхал.
Сообщения: 153
Зарегистрирован: Чт дек 05, 2019 16:28:11
Откуда: Самара

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

Сообщение TEPEM »

[del]
Аватара пользователя
TEPEM
Нашел транзистор. Понюхал.
Сообщения: 153
Зарегистрирован: Чт дек 05, 2019 16:28:11
Откуда: Самара

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

Сообщение TEPEM »

Правда можно записать весь экран одной командой перечисляя цвет текущего пикселя, вы как всегда были правы)
perelep
Родился
Сообщения: 11
Зарегистрирован: Вт мар 19, 2024 12:45:59

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

Сообщение 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мсек
В чем начесался?
perelep
Родился
Сообщения: 11
Зарегистрирован: Вт мар 19, 2024 12:45:59

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

Сообщение perelep »

PSC. Вот тут и проблема была, пофиксил.
Ответить

Вернуться в «ARM»