Вс окт 24, 2021 13:34:14
Вс окт 24, 2021 13:40:56
Вс окт 24, 2021 13:56:49
void TimerConfig (void)
{
RCC->APB2ENR |= RCC_APB2ENR_TIM1EN; // Тактиррование таймера от APB2
TIM1->SMCR &=~TIM_SMCR_SMS; // Внутреннее тактирование таймера 1
TIM1->CR1=TIM_CR1_CEN; // Режим работы таймера
TIM1->PSC=500; // Прескалер. Частота импульсов 0,1мс (10 кГц)
TIM1->ARR=9999; // Регистр перезагрузки. Будет раз в секунду.
TIM1->DIER |= TIM_DIER_UIE; // Разрешили прерывания по перезагрузке
}
NVIC_EnableIRQ(TIM1_UP_IRQn); // Разрешили прерывания в контроллере
void TIM1_UP_IRQHandler ()
{
TIM1->SR &= ~TIM_SR_UIF; // Сняли флаг сработки
if ((GPIOC->IDR & GPIO_IDR_IDR13)==0) // Моргаем светодиодом
GPIOC->ODR |=1<<13;
else
GPIOC->ODR &=~(1<<13);
}
Вс окт 24, 2021 14:04:26
Вс окт 24, 2021 14:08:09
Вс окт 24, 2021 14:16:54
#include "main.h"
void GPIO_Config(void);
void SystemClockConfig (void);
void TimerConfig (void);
int main(void)
{
SystemClockConfig();
GPIO_Config();
TimerConfig();
while(1)
{ }
}
void GPIO_Config()
{
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; // включили тактирование портов A-D
RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;
RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;
RCC->APB2ENR |= RCC_APB2ENR_IOPDEN;
GPIOC->CRH &= ~(GPIO_CRH_CNF13 | GPIO_CRH_MODE13); // CNF 0b00 MODE 0b10
GPIOC->CRH |= (0b10 << GPIO_CRH_MODE13_Pos); // PC13- активный выход
}
void SystemClockConfig (void)
{
RCC->CR |= (1<<RCC_CR_HSEON_Pos); // Запуск внешнего генератора
while (!(RCC->CR & (1<<RCC_CR_HSERDY_Pos))){} // Ждем запуска генератора...
RCC->CFGR |= (0x07<<RCC_CFGR_PLLMULL_Pos)|(0x01<<RCC_CFGR_PLLSRC_Pos); // Тактирование PLL от HSE, множитель =9
RCC->CR |= (1<<RCC_CR_PLLON_Pos); // Запуск PLL
while (!(RCC->CR & (1<<RCC_CR_PLLRDY_Pos))){} // Ждем запуска PLL...
FLASH->ACR |= (0x02<<FLASH_ACR_LATENCY_Pos); // 2 цкла ожидания для FLASH
//Делители:
RCC->CFGR |= (0x00<<RCC_CFGR_PPRE2_Pos)|(0x04<<RCC_CFGR_PPRE1_Pos)|(0x00<<RCC_CFGR_HPRE_Pos);
RCC->CFGR |= (0x02<<RCC_CFGR_SW_Pos); // Переключаемся на работу от PLL
// Ждем окончания переключения:
while ((RCC->CFGR & RCC_CFGR_SWS_Msk)!=(0x02<<RCC_CFGR_SWS_Pos)){}
RCC->CR &= ~(1<<RCC_CR_HSION_Pos); // Отключаем HSI
}
void TimerConfig (void)
{
RCC->APB2ENR |= RCC_APB2ENR_TIM1EN; // Тактиррование таймера от APB2
TIM1->SMCR &=~TIM_SMCR_SMS; // Внутреннее тактирование таймера 1
TIM1->PSC=500; // Прескалер. Частота импульсов 0,1мс (10 кГц)
TIM1->ARR=9999; // Регистр перезагрузки. Будет раз в секунду.
TIM1->DIER |= TIM_DIER_UIE; // Разрешили прерывания по перезагрузке
NVIC_EnableIRQ(TIM1_UP_IRQn); // Разрешили прерывания в контроллере
TIM1->CR1=TIM_CR1_CEN; // Режим работы таймера
}
Вс окт 24, 2021 14:25:59
Вс окт 24, 2021 14:37:10
Вс окт 24, 2021 15:52:41
Вс окт 24, 2021 15:59:00
Вс окт 24, 2021 16:04:19
Вс окт 24, 2021 17:52:28
Вс окт 24, 2021 18:27:17
int main(void)
{
SystemClockConfig();
GPIO_Config();
int Delay_Counter=500000;
while(1)
{
Delay_Counter-=1;
if (Delay_Counter==0)
{
if ((GPIOC->IDR & GPIO_IDR_IDR13)==0) // Моргаем светодиодом
GPIOC->ODR |=1<<13;
else
GPIOC->ODR &=~(1<<13);
Delay_Counter=500000;
}
}
}
Вс окт 24, 2021 18:32:17
Вс окт 24, 2021 18:47:57
Вс окт 24, 2021 19:43:16
Ср янв 12, 2022 09:26:28
Ср янв 12, 2022 18:07:36
Ср янв 12, 2022 20:44:07
Николай Relsart писал(а):А вот в новом- точка выполнения застревает где-то в ассемблеровском startup-е, на строке "LDR R0, =SystemInit".
Ср янв 12, 2022 21:25:08