#define F_APB1 48000000UL
void delay_ms(uint16_t delay)
{
TIM7->PSC = F_APB1 / 1000 + 1; //устанавливаем предделитель
TIM7->ARR = delay; //устанавливаем значение переполнения таймера, а значит и значение при котором генерируется Событие обновления
TIM7->EGR |= TIM_EGR_UG; //Генерируем Событие обновления для записи данных в регистры PSC и ARR
TIM7->CR1 |= (TIM_CR1_CEN | TIM_CR1_OPM); //Запускаем таймер записью бита CEN и устанавливаем режим Одного прохода установкой бита OPM
while ((TIM7->CR1 & TIM_CR1_CEN) != 0);
}
Спасибо. Как настроить TIM16, TIM17, чтобы было 31,250 kHz выход пина отсоединен и срабатывало прерывание и обработчик прерывания и тоже самое на 7,813 kHz приблизительно.
Есть ли аналог wacthdog_timer у STM и как его разрешить.
1) неа - для для задержек stm32 использовать нужно таймер, в ядре есть еще "бесплатный" SysTick - системный таймер с прерыванием, тоже можно организовать задержки
2)у STM32F0 eeprom нет - берем одну страницу флэш и выделяем под еепром
3) любой, например 8 битный 8кГц wav файл пишем во флэш (свободную от программы), выводим через шим таймера.
8 битный 8кГц будет примерно занимать 8кБ на одну секунду, для 10сек понадобится 80кБ флэша - это мк пожирнее. Или можно использовать сжатие звука - например ADPCM в 4 раза можно ужать. Декодер ADPCM нормально работает на 8-битных микроконтроллерах на STM32F0 и подавно .
выйти из этого спящего режима (STANDBY) можно только по прерыванию от ноги PA0 (WKUP1) или по прерыванию от RTC или после сброса.
Как настроить ногу PA0 на прерывание см. пример в STM32SnippetsF0 (ссылка выше была), папка \ExternalIT\01_HWInterruptSelection\
Почему при значениях TIM14->CCR1 = 0..10 ШИМ работает, но с мерцанием светодиода, а при больших значениях нет. Нужно плавно увеличивать яркость светодиода при значеиях ШИМ от 0 (ярко) до 1022 и при достижении нужного значения оставить яркость такой-же.
Функции конфигурации таймера и выключения светодиода.
Спойлер