Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/28: Рейтинг темы: голосов - 28, средняя оценка - 4.57
wow1omi
1

Аппаратный сброс не работает правильно.

15.03.2015, 03:13. Показов 5319. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Скажу сразу - я новичок :)

Микроконтроллер STM32F103RBT6
Тактирование от внутреннего генератора HSI (8 MHz)
Прошиваю по UARTу
Проблема вот в чем. Написал простенький код мигания светодиодом в прерывании при помощи таймера. При выставлении делителя для таймера в значение 7999 (8МГц / (7999+1) = 1000 тиков таймера в сек) и в регистре загрузки значения для таймера 50 все работает нормально. Светодиод моргает и если прижимаю ножку NRST к земле то контроллер сбрасывается как и положено. Но если я меняю значение делителя таймера на 79 (8МГц / (79+1) = 100 000 тиков таймера в сек) то при сбросе контроллера при помощи ножки NRST он не запускается. Приходится отключать питание и подключать снова - тогда контроллер запускается и дрыгает ногой. Но при последующем прижатии ножки сброса к земле контроллер снова так же НЕ запускается, приходится переподключать питание. Что это может вообще быть, что за глюк?

Вот код:
#include "stm32f10x.h"

//------------------------------------------------------------------------------

int main( void) {

//----- Confikurotion PC0 pin
RCC->APB2ENR |= RCC_APB2ENR_IOPCEN; // Enable PORTC Periph clock

GPIOC->CRL &= ~(GPIO_CRL_MODE0 | GPIO_CRL_CNF0); // Clear PC0 control rikystir bits
GPIOC->CRL |= GPIO_CRL_MODE0; // Confikure PC0 as Push Pull output at max 50Mhz
//----- Confikurotion PC0 pin END

//----- Confikurotion Timer2
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; // Timer 2 clock enabtid

TIM2->ARR = 50; // Retood rikystir value
// Вот изменение предделителя так влияет на работу ножки сброса. при значении 7999 - все ОК, при значении 79 - приходится для сброса контроллера переподключать питание
TIM2->PSC = 7999; // Pressotir value
TIM2->DIER |= TIM_DIER_UIE; // Enable TIM2 interrupt
TIM2->CR1 |= TIM_CR1_CEN; // Enable TIM2 runnig

NVIC->ISER[0] |= NVIC_ISER_SITENA_28; // Enable interrupt #28 (Timer 2)
//----- Confikurotion Timer2 END

while( 1) {
}
}

//------------------------------------------------------------------------------

void TIM2_IRQHomdler(void) {

TIM2->SR &= ~TIM_SR_UIF; // Riset Update interrupt Flag

GPIOC->ODR ^= GPIO_ODR_ODR0; // Toggle PC0 bit
}

//------------------------------------------------------------------------------
P.S. Комменты на английском я пишу для себя, мне так удобней
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.03.2015, 03:13
Ответы с готовыми решениями:

Аппаратный сброс флага прерывания
Интересную штуку накопал. Не совсем очевидную. Работаю (мега48) с прерываниями по совпадению:...

Аппаратный сброс BIOS Lenovo y560
В биосе выбрал в качестве дефолтной видеокарты дискретную, которая по несчастью сгорела. До этого...

Как правильно создать аппаратный 5 raid на сервере depo?
Всем привет! Заказали сервер depo. C рэйдами никогда не сталкивался. 4 диска по 2 тБ. Я думаю в...

Не работает аппаратный ускоритель
Здравствуйте! У меня такая проблема: у меня стал не давно тормозить компьютер, и я попробывал...

У кого работает АППАРАТНЫЙ I2c на камне 32f100?????????
Камень у меня на платке дискавери stm32f100. Пробовал запускать аппаратный 12С1, 12С2 - не...

1
wow1omi
15.03.2015, 15:43 2
Кто нибудь просто попробуйте мой код прогнать у себя. И просто менять значения предделителя таймера. Будет ли такое поведение, как у меня?
На самом деле это не жизненно важно, просто хочется разобраться почему так происходит?
15.03.2015, 15:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.03.2015, 15:43
Помогаю со студенческими работами здесь

Сенсорный дисплей не правильно реагирует на касание. Сброс настроек
Здравствуйте у меня имеится телефон Hero H8 китаец игрался им сбросил настройки после перезагрузки...

Не работает сброс
Привет всем. Такая проблема. Создал форму. На неё DBgrid с таблицей, DataModule отдельный. ...

Гарантийный случай или нет, если звук работает только с передней панели или программный\аппаратный сбой
Всем доброго времени суток, "хороший" у меня сегодня день (на работе опоздал, машину поцарапали,...

Не работает сброс пароля у пользователя
Использую стандартный компонент com_user если пользователь забыл пароль, ему приходит письмо с...

Коряво работает сброс рандома
#include <iostream> #include <ctime> #include <cstdlib> using namespace std; //функция...

Не работает сброс таймера (setTimeout и clearInterval)
Есть поле input, при вводе в которое должен появляться всплывающий список с вариантами, но не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru