21.09.2012, 19:50
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: FAQ по STM8
Кто еще горит? Хочется всех разом уличить.
|
|
|
|
22.09.2012, 20:13
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: FAQ по STM8
Сегодня мне тоже Discovery обломилась (с одного барского плеча), вот решил попробовать, что же это за зверь такой, STM8S.
Easyrider83, что, вот такое тоже не работает? :
Код:
|
#include "iostm8s105c6.h"
#pragma vector=3
__interrupt void AWU2_IRQ_Handler(void){int i = AWU_CSR1;}
void main( void )
{
// Init CLK
CLK_ECKR_bit.HSEEN = 1; // Enable HSE
CLK_SWCR_bit.SWEN = 1; // Enable switching
CLK_SWR = 0xB4; // Select HSE as System Clock
CLK_CKDIVR = 0; // Clock DIVider
while(CLK_CMSR != 0xB4); // Wait for clock stabilized
CLK_CSSR_bit.CSSEN = 1; // Enable SysClck switching
// Init GPIO
// Discovery LED = PD0, active low
PD_DDR_bit.DDR0 = 1; //PD0 - as output
PD_CR1_bit.C10 = 0; //PD0 - OC
PD_CR2_bit.C20 = 0; //PD0 - hi speed
// AWU setup
AWU_APR_bit.APR = 32; // AWU prescaler
AWU_TBR_bit.AWUTB = 0x0D; // AWU time base (somewhat about 1 second)
// Main code
while(1)
{
PD_ODR_bit.ODR0=~PD_ODR_bit.ODR0; // toggle LED
// sleep with AWU
AWU_CSR1_bit.AWUEN = 1;
asm("halt");
}
} |
Доки у ST - это ужас, за... мучался искать, что не так - тоже сначала не хотела плата мигать. Оказалось, что флаг прерывания я должон сбрасывать... сам, один, без ансам...
__________________
There's always more than one way to skin a cat.
Последний раз редактировалось tempora; 22.09.2012 в 20:15.
|
|
|
|
22.09.2012, 20:26
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: FAQ по STM8
tempora, смогу попробовать только в понедельник. HSE я не использую. И в моем коде разница лишьв том, что бит AWUEN я ставлю только один раз, а вы всякий раз перед сном. Думаете, в этом засада? У вас-то работает?
|
|
|
|
22.09.2012, 21:01
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от Easyrider83
|
Думаете, в этом засада?
|
Нет, засада не в этом - я так написал лишь для перестраховки - кристалла-то еще не знаю совсем, вот и стремлюсь везде соломки подстелить. Но вот так тоже заработало:
Код:
|
#include "iostm8s105c6.h"
#pragma vector=3
__interrupt void AWU2_IRQ_Handler(void){int i = AWU_CSR1;}
void main( void )
{
char i;
// Init CLK
/*
CLK_ECKR_bit.HSEEN = 1; // Enable HSE
CLK_SWCR_bit.SWEN = 1; // Enable switching
CLK_SWR = 0xB4; // Select HSE as Sys clock
CLK_CKDIVR = 0; // Clock DIVider
*/
CLK_SWR = 0xE1; // Select HSI as Sys clock
while(CLK_CMSR != 0xE1); // Wait for clock stabilized
CLK_CSSR_bit.CSSEN = 1; // Enable SysClck switching
// Init GPIO
// Discovery LED = PD0, active low
PD_DDR_bit.DDR0 = 1; //PD0 - as output
PD_CR1_bit.C10 = 0; //PD0 - OC
PD_CR2_bit.C20 = 0; //PD0 - hi speed
// AWU setup
AWU_APR_bit.APR = 32; // AWU prescaler
AWU_TBR_bit.AWUTB = 0x0D; // AWU time base (somewhat about 1 second)
AWU_CSR1_bit.AWUEN = 1; // Enable AWU
// Main code
while(1)
{
PD_ODR_bit.ODR0=~PD_ODR_bit.ODR0; // toggle LED
// sleep with AWU
asm("halt");
}
} |
__________________
There's always more than one way to skin a cat.
|
|
|
|
24.09.2012, 10:04
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: FAQ по STM8
В общем, благодаря Виктору ut1wpr вопрос с AWU закрыт. Итак, подводим итоги:
Код:
|
/*AWU INIT*/
AWU_LSICalibrationConfig(128000); //необходимо для точных временных интервалов. Иначе разброс очень велик
AWU_Init(AWU_TIMEBASE_1S);
enableInterrupts(); |
Обработчик прерывания:
Код:
|
INTERRUPT_HANDLER(AWU_IRQHandler, 1)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
u8 tmp=AWU-›CSR;
} |
Далее просто команда Halt();
|
|
|
|
24.09.2012, 10:38
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: FAQ по STM8
__________________
There's always more than one way to skin a cat.
|
|
|
|
24.09.2012, 11:02
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: FAQ по STM8
tempora, а у вас там "букав многа" )))))
|
|
|
|
24.09.2012, 11:07
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: FAQ по STM8
__________________
There's always more than one way to skin a cat.
|
|
|
|
24.09.2012, 11:34
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от tempora
|
И всё-таки, что было не так? Флаг забывали сбросить?
|
Все проклятые микрочипы. Привык, что камень стартует со следующей после хальта команды. А тут да, надо флажок сбросить. А без файла векторов прерываний он у меня вообще в хард фаулт падал, чем доводил до полного иступления.
|
|
|
|
24.09.2012, 11:49
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: FAQ по STM8
Ясно, спасибо. Надо будет еще калибровку осилить... хотя, 12,5 процентов не так уж и много, может " нуивонафик" сделаю, вместо калибровки.
__________________
There's always more than one way to skin a cat.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 15:36.
|
|