13.12.2011, 13:40
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Правильно. Это какая то недоработка производителя. Вот если бы скрестить часы от STM8L, да с отдельным питанием как в 32-х вышло бы очень хорошо. Почему не сделали - непонятно.
|
|
|
|
13.12.2011, 14:12
|
|
Временная регистрация
Регистрация: 24.09.2010
Сообщений: 97
Сказал спасибо: 9
Сказали Спасибо 41 раз(а) в 31 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от kison
|
Вот если бы скрестить часы от STM8L, да с отдельным питанием как в 32-х вышло бы очень хорошо. Почему не сделали - непонятно.
|
В 32L тоже нет отдельного питания. На семинаре задавал вопрос, ответили, что серия L рассчитана сразу на батарейное питание, так зачем вторая батарея?
|
|
|
|
20.02.2012, 11:08
|
|
Прохожий
Регистрация: 15.07.2007
Сообщений: 5
Сказал спасибо: 11
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Здравствуйте. Подскажите пожалуйста. Работаю с STM8S105, пытаюсь вывести сигнал шим на выход TIM1_CHxN (x=1..3). Кто-нибудь сталкивался с подобным, помогите. На выводе всегда 0, хотя "дрыгать" ногой удается, шим также формируется отслеживаю на выходах TIMCH1....TIMCH4
|
|
|
|
28.07.2012, 14:39
|
|
Частый гость
Регистрация: 07.11.2010
Сообщений: 14
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от kozer_1983
|
На выводе всегда 0
|
Не знаю как в s серии, в l серии нужно было в регистрах таймера указать тактировать внешние порты и вывод сигнула наружу, только тогда смог запустить.
(*TIM2).CCER1 = TIM_CCER1_CC1E; //CC1 output enable
(*TIM2).BKR = TIM_BKR_MOE; //Main output enable
Сигнал будет подан на порт после ресета на канал 1 второго таймера. Можно переопределить внешний канал на таймере
(*SYSCFG).RMPCR1 = (u ((0b00100000)&SYSCFG_RMPCR1_USART1TR_REMAP); примерно где-то в этом регистре (это для уарта)
Возникла следующая проблема с i2c.
После глубокого ресета, отключенного питания я могу прочитать всего один байт.
Затем контроллер stm8l151g6 уходит в глубокий ступор и показывает вечный старт. Ни ресет, ни отключение питания, ни перезаливка программы не помогают.
Выход из ситуации если залить программу с посылкой сигнала СТОП на и2ц контроллер опять же виснит, т.к. не может сгенерировать старт. как в последствии выяснилось он не может переключить состояние из СТАТ в СТОП и наоборот. После след перезаливки программы без посылки первого стопа, могу опять прочитать один байт, и все поновой.
По ерраташиту сказано, что посылка стопа сразу после старта и не корректное отрабатывание стопа вводит контроллер в ступор, но не на столько чтобы после отключения питания, сохранялось предыдущее состояние.
Листинг программы. Заранее благодарю за помощь.
Устанавливаем порты
Код:
|
(*GPIOC).ODR |= (u8)(0b00000000 & 0xff); //IR_mod - Push-pull, fast mode 4
(*GPIOC).DDR |= (u8)(0b00110111 & 0xff); //IR_out - Push-pull, fast mode 5
(*GPIOC).CR1 |= (u8)(0b00000100 & 0xff); //IR_in - Float interrupt Off 6
(*GPIOC).CR2 |= (u8)(0b00110111 & 0xff); //LF_engF - as push-pull outputs, off 2
//I2C_sda - open drain fast 0
//I2C_scl - open drain fast 1
[/php]
I2C
PHP код:
|
I2C_Init(I2C1, 10000, 0x00,
I2C_Mode_I2C, I2C_DutyCycle_2,
I2C_Ack_Enable, I2C_AcknowledgedAddress_7bit);
|
Чтение с I2C
[php]
void I2C_Read_Reg (u8 DevAdr, u8 DevIntAdr, u8 BufSize)
{
I2C_GenerateSTART(I2C1, ENABLE);
while (!I2C_GetFlagStatus(I2C1,I2C_FLAG_SB))
{
}
/* Send device address for write */
I2C_Send7bitAddress(I2C1, DevAdr, I2C_Direction_Transmitter);
/* Test on ADDR Flag */
while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))
{
}
/* Send the device's internal address to write to */
I2C_SendData(I2C1, DevIntAdr);
/* Test on TXE FLag (data sent) */
while ((!I2C_GetFlagStatus(I2C1,I2C_FLAG_TXE)) && (!I2C_GetFlagStatus(I2C1,I2C_FLAG_BTF)))
{
}
I2C_GenerateSTART(I2C1, ENABLE);
while (!I2C_GetFlagStatus(I2C1,I2C_FLAG_SB))
{
}
I2C_Send7bitAddress(I2C1, DevAdr, I2C_Direction_Receiver);
while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED))
{
}
while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED))
{
}
I2C_Read_Buf[0] = I2C_ReceiveData(I2C1);
/* Data transfer finished */
while ((!I2C_GetFlagStatus(I2C1,I2C_FLAG_RXNE)) && (!I2C_GetFlagStatus(I2C1,I2C_FLAG_BTF)))
{
}
/* Send STOP Condition */
(*I2C1).CR2 |= I2C_CR2_STOP;
} |
Последний раз редактировалось dosikus; 30.06.2013 в 19:01.
|
|
|
|
17.09.2012, 00:28
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от kison
|
Функция задержки иногда полезная вещь. Настраивать ее неблагодарное дело.
В общем вот пример такой задержки, компилятор Космик.
Код:
|
// файл delay.h
#ifndef DELAY_H
#define DELAY_H
#ifndef F_CPU
#error "F_CPU not defined!"
#endif
#define US(x) \
(unsigned int)((((x*(F_CPU/1000000.0))‹=8)*8 \
+((x*(F_CPU/1000000.0))›8)*(x*(F_CPU/1000000.0)) - 4)/4)
#define MS(x) US(x*1000)
@inline void delay(unsigned int del)
{
volatile unsigned int tmp;
tmp = del;
#asm
$N:
decw x
jrne $L
nop
#endasm
}
#endif // #ifndef DELAY_H |
|
А под IAR нет ничего работоспособного?
|
|
|
|
18.09.2012, 10:51
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Что то типа этого , это перелопаченная мной задержка kison'а .
Пинки принимаются...
Код:
|
#ifndef DELAY_H
#define DELAY_H
#include ‹stdint.h›
#ifndef F_CPU
#error "F_CPU not defined!"
#endif
#define US(x) \
(unsigned int)((((x*(F_CPU/1000000.0))‹=6)*6 + ((x*(F_CPU/1000000.0))›6)*(x*(F_CPU/1000000.0)) - 2)/4)
#define MS_SHORT_MAX ((262140000UL/F_CPU))
#pragma inline //=forced
void delay(uint16_t __cycle_count)
{
__asm("loop: \n"
"decw x \n"
"jrne loop \n"
" nop \n");
}
#define delay_us(x) delay(US(x))
#pragma inline =forced
void delay_ms(uint16_t ms)
{
if(ms ‹ MS_SHORT_MAX)
{
delay(US((uint16_t)ms*1000));
}
else
{
while(ms--) delay(US(999));
}
}
#endif // #ifndef DELAY_H |
__________________
Осторожно , злой кот
|
|
|
Эти 3 пользователя(ей) сказали Спасибо dosikus за это сообщение:
|
|
|
18.09.2012, 10:53
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
__________________
Осторожно , злой кот
|
|
|
|
18.09.2012, 11:44
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Там еще есть функция, возращающая значение F_CPU
uint32_t CLK_GetClockFreq(void)
Да и не всегда весь проект на одной частоте крутится. Я часто использую смену частот. Зависит от задачи.
Спасибо, у меня тоже своя фишка на этот счет.
Последний раз редактировалось Easyrider83; 18.09.2012 в 11:48.
|
|
|
|
30.06.2013, 18:48
|
|
Временная регистрация
Регистрация: 18.01.2010
Сообщений: 89
Сказал спасибо: 7
Сказали Спасибо 22 раз(а) в 14 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Начал переписывать код с mega8 на 8l152c6, думал, вот часики встроенные, можно будет часть кода выкинуть...
Оказывается, в часики можно записать некорректное время (дату пока не проверял). Типа 25:61:61 - и они будут тикать. Секунды и минуты до 79, потом в 0, а часы до 39. Сброс происходит при переполнении младшей цифры BCD.
День недели они видать тоже просто прибавляют, а рассчитывать нужно будет ручками, если конечно есть такая задача.
|
|
|
|
08.07.2013, 23:49
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
А кто уже писал асемблерные функции отдельным файлом под IAR STM8 ? Для IAR AVR в доке всё понятно расписано, а под IAR STM8 с ходу не разобралься. Кто написал, киньте примером.
__________________
"picavr(ГАВ)мыло.ру" USB_Analyzer, Digital_Storage_Oscilloscope "picavr.kr1.ru" заказы в Китай компонентов/изготовление: плат/ЖКИ/мембраных клавиатур/имп трансформаторов
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 02:40.
|
|