Таймер не работает
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: Таймер не работает
[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: Таймер не работает
Спасибо Вам большое!
Сопоставляю пример, труды какого то деятеля из интернета и референс, вот интересная штука
Цитата "" Для этого пишем в регистр Volatile Enhanced Configuration Register, что мы именно это и хотим; при этом не забывая, что для любой записи, будь то в регистр конфига или массив памяти, нужна команда-открывашка Write Enable (WREN):"
Что бы это могло значить?
Сопоставляю пример, труды какого то деятеля из интернета и референс, вот интересная штука
Цитата "" Для этого пишем в регистр Volatile Enhanced Configuration Register, что мы именно это и хотим; при этом не забывая, что для любой записи, будь то в регистр конфига или массив памяти, нужна команда-открывашка Write Enable (WREN):"
Что бы это могло значить?
- TEPEM
- Нашел транзистор. Понюхал.
- Сообщения: 153
- Зарегистрирован: Чт дек 05, 2019 16:28:11
- Откуда: Самара
Re: Таймер не работает
Там в либе, кроме основных битов _0 _1 и тд, есть пустые, без номера бита и _msk, _pos не подскажите для чего это?
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: Таймер не работает
Для макросов _VAL2FLD и _FLD2VAL.
- TEPEM
- Нашел транзистор. Понюхал.
- Сообщения: 153
- Зарегистрирован: Чт дек 05, 2019 16:28:11
- Откуда: Самара
Re: Таймер не работает
В функции объявляю переменную, надо ее обнулять или с новым вызовом функции она обновится?
- Реклама
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: Таймер не работает
Надо конечно. Локальные переменные создаются на стеке неинициализированными.
- TEPEM
- Нашел транзистор. Понюхал.
- Сообщения: 153
- Зарегистрирован: Чт дек 05, 2019 16:28:11
- Откуда: Самара
Re: Таймер не работает
У меня камень виснет в хард при попытке считать в переменную содержимое адреса памяти(
qi = *(__IO uint32_t*)0x90000000;
и так в хард фаулт
for(uint16_t iw = 0; iw < 2; iw++)
{
uint16_t dig16 = *(uint16_t*)address;
address = address + 2;
}
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: Таймер не работает
Что у тебя по этому адресу расположено?
- TEPEM
- Нашел транзистор. Понюхал.
- Сообщения: 153
- Зарегистрирован: Чт дек 05, 2019 16:28:11
- Откуда: Самара
Re: Таймер не работает
Qspi
от 0х90000000 и выше
от 0х90000000 и выше
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: Таймер не работает
Ну значит не взлетел.
- 240265
- Электрический кот
- Сообщения: 1029
- Зарегистрирован: Сб мар 09, 2013 11:29:22
- Откуда: 40RUS, Жуков
Re: Таймер не работает
Ребят , Вы телефонами не пробовали обменяться. Или вы количество постов набиваете ?
IVL ex UA6PJ
- TEPEM
- Нашел транзистор. Понюхал.
- Сообщения: 153
- Зарегистрирован: Чт дек 05, 2019 16:28:11
- Откуда: Самара
Re: Таймер не работает
Кто то может расшифровать это?
MODIFY_REG(hqspi->Instance->CR,(QUADSPI_CR_FSEL_Msk ), ((hqspi->Init.ClockPrescaler << 24U)| hqspi->Init.SampleShifting | hqspi->Init.FlashID));
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: Таймер не работает
#define MODIFY_REG(REG, CLEARMASK, SETMASK) WRITE_REG((REG), (((READ_REG(REG)) & (~(CLEARMASK))) | (SETMASK)))
- TEPEM
- Нашел транзистор. Понюхал.
- Сообщения: 153
- Зарегистрирован: Чт дек 05, 2019 16:28:11
- Откуда: Самара
Re: Таймер не работает
[del]
- TEPEM
- Нашел транзистор. Понюхал.
- Сообщения: 153
- Зарегистрирован: Чт дек 05, 2019 16:28:11
- Откуда: Самара
Re: Таймер не работает
Правда можно записать весь экран одной командой перечисляя цвет текущего пикселя, вы как всегда были правы)
Re: Таймер не работает
Немного запутался с инициализацией HSE...STM32F401RCT6, кварц 25МГц
Пытаюсь сделать так:
Хочу чтоб таймер каждую сек прерывание генерил. А на деле вместо 1 сек выходит 220мсек
В чем начесался?
Пытаюсь сделать так:
Код: Выделить всё
#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){
}
}В чем начесался?
Re: Таймер не работает
PSC. Вот тут и проблема была, пофиксил.


