10.04.2013, 08:39
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
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);
}
}
} |
|
|
|
|
10.04.2013, 10:41
|
|
Вид на жительство
Регистрация: 10.08.2005
Сообщений: 385
Сказал спасибо: 0
Сказали Спасибо 161 раз(а) в 140 сообщении(ях)
|
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 */
|
|
|
|
|
10.04.2013, 12:38
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: STM32F051C4 и Keil
Это сделано:
RCC-›APB1ENR = 0x10000010; - включение повер-интерфейса и таймера_6
RCC-›BDCR = 0x00018101; - ресет бэкап-домена и
RCC-›BDCR = 0x00008101; - включение бэкап-домена и генератора, сейчас работает от внутреннего, частота его нормально выводится на ножку MCO - то есть он работает
Удалось запустить прерывания от ножек через EXTI, но таймер по-прежнему не генерит прерываний. Причем этот же код вместе с обработчиком нормально работает на стм32ф100 (имя обработчика естественно другое).
Возможно, у стм32ф0хх есть нюансы? stdperiph_lib не используется, только CMSIS, мне так проще
|
|
|
|
10.04.2013, 15:33
|
|
Вид на жительство
Регистрация: 10.08.2005
Сообщений: 385
Сказал спасибо: 0
Сказали Спасибо 161 раз(а) в 140 сообщении(ях)
|
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
|
|
|
10.04.2013, 15:47
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: STM32F051C4 и Keil
Это есть
PWR-›CR = 0x0000001D; - установка бита PWR_CR_DBP, сброс флагов standby и wakeup и установка бита Low-power deepsleep
|
|
|
|
10.04.2013, 16:02
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: STM32F051C4 и Keil
Нашел свою ошибку. Для включения бэкап-интерфейса нужна команда
PWR-›CR = 0x0000010D;
Ошибся в битах, и без твоего намека ещё бы долго блуждал в трех соснах... Спасибо! Все сразу запустилось, вопрос снят.
|
|
|
|
10.04.2013, 16:15
|
|
Супер-модератор
Регистрация: 15.10.2007
Сообщений: 3,529
Сказал спасибо: 172
Сказали Спасибо 1,560 раз(а) в 810 сообщении(ях)
|
Re: STM32F051C4 и Keil
Сообщение от niXto
|
Это есть PWR-›CR = 0x0000001D
|
Сообщение от niXto
|
PWR-›CR = 0x0000010D Ошибся в битах
|
С такой записью неудивительно.
|
|
|
|
10.04.2013, 16:16
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: STM32F051C4 и Keil
Да, стиль программирования "после нас хоть потоп" ))))
|
|
|
|
10.04.2013, 18:56
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: STM32F051C4 и Keil
Инициализация периферии пишется один раз, а экономия пары кБ для 16-кБ чипа может впоследствии пригодиться. У меня массовое производство, поэтому приходится выбирать чип подешевле, F051C4 стоит чуть больше доллара, остальные начинаются от 1,8
Сообщение от realid
|
С такой записью неудивительно.
|
Наоборот, удивительно, я помню как ещё программировал С51 в машинных кодах на самодельном программаторе по моей же схеме - компьютеры тогда были слишком недоступными, а желание расти и развиваться - уже было. Так что это травма на всю жизнь
Картинка в полном разрешении http://nixto.eu5.org/images/Image000164.jpg
|
|
|
|
10.04.2013, 19:03
|
|
Супер-модератор
Регистрация: 15.10.2007
Сообщений: 3,529
Сказал спасибо: 172
Сказали Спасибо 1,560 раз(а) в 810 сообщении(ях)
|
Re: STM32F051C4 и Keil
Сообщение от niXto
|
Наоборот, удивительно, я помню как ещё программировал С51 в машинных кодах на самодельном программаторе по моей же схеме - компьютеры тогда были слишком недоступными, а желание расти и развиваться - уже было. Так что это травма на всю жизнь
|
Стареете, внимание уже не то, что раньше))
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
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.
|
|