Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 10.04.2013, 08:39  
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
niXto на пути к лучшему
По умолчанию STM32F051C4 и Keil

Что-то лыжи совсем не едут... startup_stm32f0xx.s, system_stm32f0xx.c, core_cm0.h пробовал и родной Кейловский, и из CMSIS, но все равно работает некорректно. RTC не включается - даже не перехватывается управление ножкой PC15 (хочу вывести на нее 512 Гц для работы умножителя дисплея) - такое ощущение, что на него не поступает тактирование, хотя бит в BDCR установлен, регистры RTC в отладчике не прописываются. Таймер6 работает, но не генерирует прерывание, а запись байта в NVIC-›ISER[0] (разрешение прерываний) автоматически приводит к записи этого же байта в NVIC-›IСER[0] (запрет прерываний). Запись в NVIC-›IСER[0] тоже автоматом дублируется в NVIC-›ISER[0] - это видно и в отладчике, и в железе (вывожу эти байты в порт и смотрю светодиодом), в итоге прерывание от таймера никогда не генерируется. Что ЭТО и как с ним бороться? В настройках проекта чип выбран правильно, в строчку Define писал/удалял STM32F0XX

Код:
#include "stm32f0xx.h"


int TEMP = 0;
int TEMPp = 0;

void TIM6_DAC_IRQHandler (void) {
  TIM6-›SR = 0x00;
  	if (TEMP == 0x00){
	
		TEMP = 1;
		GPIOC-›BSRR = 0x20000000;	 
	 } 
	 else {
		TEMP = 0;
		GPIOC-›BSRR = 0x00002000;	 
	 }
}

 void Delay( uint32_t Val) 
{
	for( ; Val != 0; Val--) 
			{
			}
}

int main (void){


RCC-›CSR     = 0x00000001;  //LSI EN
RCC-›APB1ENR = 0x10000010;  //POWER INTERFACE
PWR-›CR      = 0x0000001D;  //SLEEP PVD
RCC-›CR      = 0x00000083;  //CLOCK HSI
RCC-›CFGR    = 0x02000000;  //PLL CLOCK MCO 02
RCC-›AHBENR  = 0x000F0014;
RCC-›APB2ENR = 0x00200001;  //DEBUG
RCC-›BDCR    = 0x00018101;  //Backup Reset, LSE_EN


GPIOA-›MODER   = 0x28025555;   //MCO
GPIOB-›MODER   = 0x00050004;
GPIOC-›MODER   = 0x04000000;
GPIOA-›OTYPER  = 0x0000;
GPIOB-›OTYPER  = 0x0000;
GPIOC-›OTYPER  = 0x0000;
GPIOA-›OSPEEDR = 0x0C005555;
GPIOB-›OSPEEDR = 0x00000000;
GPIOC-›OSPEEDR = 0x00000000;
GPIOA-›PUPDR   = 0xA5555555;
GPIOB-›PUPDR   = 0xAAAA5551;
GPIOC-›PUPDR   = 0x01555555;

//RCC-›BDCR    = 0x00008101;  //LSI RTC
//while ((RCC-›BDCR & RCC_BDCR_LSERDY) == 0) { } //Зависает
     

/*RTC-›WPR = 0x000000CA;
RTC-›WPR = 0x00000053;
RTC-›ISR = 0x00000080;
//while ((RTC-›ISR & RTC_ISR_INITF) == 0) { } //Зависает
RTC-›TR    = 0x00000003;
RTC-›CR    = 0x00800000;
RTC-›PRER  = 0x007F00FF; //PRESCALER
RTC-›TAFCR = 0x00E80000; //MODE VALUE
RTC-›ISR   = 0x00000000;
RTC-›WPR   = 0x000000FF;  */

TIM6-›CR1 = 0x0003;
TIM6-›DIER = 0x0001;
TIM6-›ARR	= 0x0800;
TIM6-›PSC	= 0x10;
NVIC-›ISER[0] = 0x00030000;
NVIC-›ICER[0] = 0x00010000;
//NVIC_EnableIRQ (TIM6_DAC_IRQn);
__enable_irq ();
GPIOC-›BSRR = 0x00002000;

 while (1){

 if (TEMPp == 0x00){
		TEMPp = 1;
		GPIOC-›BSRR = 0x20000000;
    GPIOA-›ODR = NVIC-›ICER[0]››16;
    Delay(1000000);
	 } 
	 else {
		TEMPp = 0;
		GPIOC-›BSRR = 0x00002000;
    GPIOA-›ODR = NVIC-›ISER[0]››16;
    Delay(1000000);
	 }
 }
}
Реклама:
niXto вне форума  
Непрочитано 10.04.2013, 10:41  
Alecsej
Вид на жительство
 
Регистрация: 10.08.2005
Сообщений: 385
Сказал спасибо: 0
Сказали Спасибо 161 раз(а) в 140 сообщении(ях)
Alecsej на пути к лучшему
По умолчанию Re: STM32F051C4 и Keil

Может быть это
Цитата:
// Enable PWR clock
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
// Enable access to the backup register, so LSE can be enabled
PWR_BackupAccessCmd(ENABLE);
Цитата:
void PWR_BackupAccessCmd(FunctionalState NewState)
{
/* Check the parameters */
assert_param(IS_FUNCTIONAL_STATE(NewState));

if (NewState != DISABLE)
{
/* Enable the Backup Domain Access */
PWR-›CR |= PWR_CR_DBP;
}
else
{
/* Disable the Backup Domain Access */
PWR-›CR &= ~PWR_CR_DBP;
}
}
Цитата:
#define PWR_CR_DBP ((uint16_t)0x0100) /*!‹ Disable Backup Domain write protection */
Alecsej вне форума  
Непрочитано 10.04.2013, 12:38  
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: STM32F051C4 и Keil

Это сделано:
RCC-›APB1ENR = 0x10000010; - включение повер-интерфейса и таймера_6
RCC-›BDCR = 0x00018101; - ресет бэкап-домена и
RCC-›BDCR = 0x00008101; - включение бэкап-домена и генератора, сейчас работает от внутреннего, частота его нормально выводится на ножку MCO - то есть он работает

Удалось запустить прерывания от ножек через EXTI, но таймер по-прежнему не генерит прерываний. Причем этот же код вместе с обработчиком нормально работает на стм32ф100 (имя обработчика естественно другое).

Возможно, у стм32ф0хх есть нюансы? stdperiph_lib не используется, только CMSIS, мне так проще
niXto вне форума  
Непрочитано 10.04.2013, 15:33  
Alecsej
Вид на жительство
 
Регистрация: 10.08.2005
Сообщений: 385
Сказал спасибо: 0
Сказали Спасибо 161 раз(а) в 140 сообщении(ях)
Alecsej на пути к лучшему
По умолчанию Re: STM32F051C4 и Keil

/* Enable the Backup Domain Access */
PWR-›CR |= PWR_CR_DBP;

Цитата:
The LSEON, LSEBYP, RTCSEL and RTCEN bits of the Backup domain control register
(RCC_BDCR) are in the Backup domain. As a result, after Reset, these bits are write-
protected and the DBP bit in the Power control register (PWR_CR) has to be set before
these can be modified. Refer to Section 6.1.2 on page 76 for further information. These bits
are only reset after a Backup domain Reset (see Section 7.1.3: Backup domain reset). Any
internal or external Reset will not have any effect on these bits.
Alecsej вне форума  
Сказали "Спасибо" Alecsej
niXto (10.04.2013)
Непрочитано 10.04.2013, 15:47  
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: STM32F051C4 и Keil

Это есть
PWR-›CR = 0x0000001D; - установка бита PWR_CR_DBP, сброс флагов standby и wakeup и установка бита Low-power deepsleep
niXto вне форума  
Непрочитано 10.04.2013, 16:02  
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: STM32F051C4 и Keil

Нашел свою ошибку. Для включения бэкап-интерфейса нужна команда
PWR-›CR = 0x0000010D;

Ошибся в битах, и без твоего намека ещё бы долго блуждал в трех соснах... Спасибо! Все сразу запустилось, вопрос снят.
niXto вне форума  
Непрочитано 10.04.2013, 16:15  
realid
Супер-модератор
 
Аватар для realid
 
Регистрация: 15.10.2007
Сообщений: 3,529
Сказал спасибо: 172
Сказали Спасибо 1,560 раз(а) в 810 сообщении(ях)
realid на пути к лучшему
По умолчанию Re: STM32F051C4 и Keil

Сообщение от niXto Посмотреть сообщение
Это есть PWR-›CR = 0x0000001D
Сообщение от niXto Посмотреть сообщение
PWR-›CR = 0x0000010D Ошибся в битах
С такой записью неудивительно.
realid вне форума  
Непрочитано 10.04.2013, 16:16  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: STM32F051C4 и Keil

Да, стиль программирования "после нас хоть потоп" ))))
Easyrider83 вне форума  
Непрочитано 10.04.2013, 18:56  
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: STM32F051C4 и Keil

Инициализация периферии пишется один раз, а экономия пары кБ для 16-кБ чипа может впоследствии пригодиться. У меня массовое производство, поэтому приходится выбирать чип подешевле, F051C4 стоит чуть больше доллара, остальные начинаются от 1,8

Сообщение от realid Посмотреть сообщение
С такой записью неудивительно.
Наоборот, удивительно, я помню как ещё программировал С51 в машинных кодах на самодельном программаторе по моей же схеме - компьютеры тогда были слишком недоступными, а желание расти и развиваться - уже было. Так что это травма на всю жизнь

Картинка в полном разрешении http://nixto.eu5.org/images/Image000164.jpg
niXto вне форума  
Непрочитано 10.04.2013, 19:03  
realid
Супер-модератор
 
Аватар для realid
 
Регистрация: 15.10.2007
Сообщений: 3,529
Сказал спасибо: 172
Сказали Спасибо 1,560 раз(а) в 810 сообщении(ях)
realid на пути к лучшему
По умолчанию Re: STM32F051C4 и Keil

Сообщение от niXto Посмотреть сообщение
Наоборот, удивительно, я помню как ещё программировал С51 в машинных кодах на самодельном программаторе по моей же схеме - компьютеры тогда были слишком недоступными, а желание расти и развиваться - уже было. Так что это травма на всю жизнь
Стареете, внимание уже не то, что раньше))
realid вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопросик по Keil serb-radio Микроконтроллеры, АЦП, память и т.д 25 19.01.2011 16:08
Keil uVision4 maruda_v Микроконтроллеры, АЦП, память и т.д 5 28.08.2010 00:44
[Решено] keil 3 keil23 Делимся опытом 5 07.10.2007 09:00
keil 3 rio Микроконтроллеры, АЦП, память и т.д 3 15.08.2006 21:41
PonyProg и Keil Muzicant Микроконтроллеры, АЦП, память и т.д 9 09.03.2004 16:58


Часовой пояс GMT +4, время: 02:35.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot