Bill 0 23 июня, 2010 Опубликовано 23 июня, 2010 · Жалоба А чем вы прошивали контроллер до появления у вас STM8S-Discovery ? ST_Link Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fmdost 0 23 июня, 2010 Опубликовано 23 июня, 2010 · Жалоба В общем, пришел к выводу, что дело скорее всего не в программе, а именно в "железе". Правда, единственное в чем я отошел от рекомендаций фирмы, это величина емкости внешнего конденсатора. Фирма рекомендует значения 0.47 - 1.0 мкф. У меня стоит конденсатор номиналом 2.2 мкф. Есть призрачная надежда, что с заменой конденсатора все встанет на свои места. Но ... 2.2 мкф керамика 0805 y5v? Если да то надо заменить на электролит аналогичной ёмкости + керамику на 0.1. Звенят эти чЮдоконденсаторы(0805) на мегагерце, ничуть не хуже кварцев :cranky:. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bill 0 24 июня, 2010 Опубликовано 24 июня, 2010 · Жалоба 2.2 мкф керамика 0805 y5v? Если да то надо заменить на электролит аналогичной ёмкости + керамику на 0.1. Звенят эти чЮдоконденсаторы(0805) на мегагерце, ничуть не хуже кварцев :cranky:. У меня стоят танталовые чип. Емкость пробовал ставить и 2.2, и 1.0. Разницы никакой нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
topkin 0 24 июня, 2010 Опубликовано 24 июня, 2010 · Жалоба В общем, дело такое. Прошил свою программу в STM8S Discovery. Все работает нормально. Так что, похоже, все упирается в STM8S103K6 (в Discovery стоит STM8S105C6). Или нет? Да, в моих двух экземплярах STM8S - DISCOVERY стоит именно STM8S105C6, думаю и у вас тоже, чай на одной китайской фабрике сделаны. Судя по всему дело было в контроллере, хотя очень странно это все, мне как то слабо верится) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Peps 0 9 июля, 2010 Опубликовано 9 июля, 2010 · Жалоба Мельком просматривая Ваш код (в ассемблере ST8S не силен) обратил внимание, что Вы используете таймер 5, которого в микроконтроллере STM8S103K просто нету (смотрел даташит). Может быть это как то влияет на работоспособность вашей программы. Сам сейчас пишу библиотеки инициализации и отлаживаюсь на Discovery но с расчетом на 103 контроллеры, которые буду использовать. Поэтому Ваша проблема меня насторожила. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bill 0 9 июля, 2010 Опубликовано 9 июля, 2010 · Жалоба Мельком просматривая Ваш код (в ассемблере ST8S не силен) обратил внимание, что Вы используете таймер 5, которого в микроконтроллере STM8S103K просто нету (смотрел даташит). Может быть это как то влияет на работоспособность вашей программы. Сам сейчас пишу библиотеки инициализации и отлаживаюсь на Discovery но с расчетом на 103 контроллеры, которые буду использовать. Поэтому Ваша проблема меня насторожила. Кому вопрос? Если - мне, то я таймер вообще не использую. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ведущий_специалист 0 16 июля, 2010 Опубликовано 16 июля, 2010 · Жалоба Всем привет. Решил прицепить часы реального времени ds1338 к stm8s105c4. Платка самодельная, на ней успешно работает SPI и шим. С I2C получилась проблема. Кое как контроллер все таки начал писать в дску данные. При считывании контроллер висит. При отладке посмотрел что ждет event события. Осцил показывает что sda в нуле. I2C использую аппаратный, причем в "фузах" прошил ремап на другие ноги порта. Всю голову изломал, уже готов сделать все на программном i2c, но движет какой то спортивный интерес. Прилагаю кусок кода.... void Init_I2C(void) { I2C_Init(400000, 0xD0, I2C_DUTYCYCLE_2, I2C_ACK_CURR, I2C_ADDMODE_7BIT, (u8)16 ); } //=============Читаем И2ц Часы ========================= unsigned char ds_read(unsigned char address) { unsigned char data; /* генерируем start & ожидаем event detection */ I2C_GenerateSTART(ENABLE); // i2c_start(); while (!I2C_CheckEvent(I2C_EVENT_MASTER_START_SENT)); // тут уже висим....... I2C_Send7bitAddress(0xD0, I2C_DIRECTION_TX); while (!I2C_CheckEvent(I2C_EVENT_MASTER_ADDRESS_ACKED)); I2C_ClearFlag(I2C_FLAG_ADDRESSSENTMATCHED); // i2c_write(0xD0); I2C_SendData(address); while (!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED)); // i2c_write(address); I2C_GenerateSTART(ENABLE); while (!I2C_CheckEvent(I2C_EVENT_MASTER_START_SENT)); // i2c_start(); (повторный старт) I2C_Send7bitAddress(0xD0, I2C_DIRECTION_RX); while (!I2C_CheckEvent(I2C_EVENT_MASTER_ADDRESS_ACKED)); I2C_ClearFlag(I2C_FLAG_ADDRESSSENTMATCHED); // i2c_write(0xD1); (читаем) while (!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_RECEIVED)); data = I2C_ReceiveData(); //data=i2c_read(0); I2C_GenerateSTOP(ENABLE); // i2c_stop(); return data; } //======================Пишем в И2ц Часы ================ (вроде как работает) void ds_write(unsigned char address, unsigned char data) { I2C_GenerateSTART(ENABLE); // i2c_start(); while (!I2C_CheckEvent(I2C_EVENT_MASTER_START_SENT)); // // I2C_SendData(0xd0); // while (!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED)); // i2c_write(address); I2C_Send7bitAddress(0xD0, I2C_DIRECTION_TX); while (!I2C_CheckEvent(I2C_EVENT_MASTER_ADDRESS_ACKED)); I2C_ClearFlag(I2C_FLAG_ADDRESSSENTMATCHED); // i2c_write(0xD0); I2C_SendData(address); while (!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED)); // i2c_write(address); I2C_SendData(data); while (!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED)); // i2c_write(data); I2C_GenerateSTOP(ENABLE); // i2c_stop(); } void write_time_ds (void) { ds_write(0x00, s); ds_write(0x01, m); ds_write(0x02, h); } void get_time_ds(void) { // // s = ds_read(0x00); m = ds_read(0x01); h = ds_read(0x02); } проверяю так, сперва вызываю write_time_ds(); потом пытаюсь читать get_time_ds(); вобщем ваши мнения господа Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ведущий_специалист 0 19 июля, 2010 Опубликовано 19 июля, 2010 · Жалоба Всем спасибо за ответы....Разобрался сам. Надо перед стоп было ставить NACK Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Stanislav_S 0 20 июля, 2010 Опубликовано 20 июля, 2010 · Жалоба Начал мучать потихоньку DISCОVERY, работаю с IAR, создал два проекта - один с использованием стандартной библиотеки периферии, другой без нее - так сказать все руками :) Решил запустить таймер номер 4 и поморгать светодиодиком, однако что то нифига не получается ни руками ни с использованием библиотеки, нет ли у кого примера работы с таймером 4? А то весь моск сломал, но чего то не идет :smile3046: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
oll 0 20 июля, 2010 Опубликовано 20 июля, 2010 · Жалоба Начал мучать потихоньку DISCОVERY, работаю с IAR, создал два проекта - один с использованием стандартной библиотеки периферии, другой без нее - так сказать все руками :) Решил запустить таймер номер 4 и поморгать светодиодиком, однако что то нифига не получается ни руками ни с использованием библиотеки, нет ли у кого примера работы с таймером 4? А то весь моск сломал, но чего то не идет :smile3046: для второго таймера не пойдет? Probe.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
topkin 0 21 июля, 2010 Опубликовано 21 июля, 2010 (изменено) · Жалоба Начал мучать потихоньку DISCОVERY, работаю с IAR, создал два проекта - один с использованием стандартной библиотеки периферии, другой без нее - так сказать все руками :) Решил запустить таймер номер 4 и поморгать светодиодиком, однако что то нифига не получается ни руками ни с использованием библиотеки, нет ли у кого примера работы с таймером 4? А то весь моск сломал, но чего то не идет :smile3046: Один из первых проектов под дискавери, используется таймер 2, зажигает светодиод с частотой 1Гц по прерыванию с использованием библиотек ST. Правда использовался STVD + компилятор от raisonance. С cosmic тоже где то есть, разницы там почти нет, но искать лень. Подогнать под IAR проблем не составит. TIM2.ZIP Изменено 21 июля, 2010 пользователем topkin Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Stanislav_S 0 21 июля, 2010 Опубликовано 21 июля, 2010 · Жалоба Ок спасибо, помучаю таймер номер 2, хотя все таки хотелось 4, поскольку из доки нифига не ясно как оно работает, дока пока только удручает своей лаконичностью :07: , а за примеры спасибо, буду ломать моск дальше :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
topkin 0 21 июля, 2010 Опубликовано 21 июля, 2010 (изменено) · Жалоба Ок спасибо, помучаю таймер номер 2, хотя все таки хотелось 4, поскольку из доки нифига не ясно как оно работает, дока пока только удручает своей лаконичностью :07: , а за примеры спасибо, буду ломать моск дальше :) Так с TIM4 должно быть еще проще, ибо он 8-ми разрядный. Что касаемо док от ST то это да, особенно после атмела было тяжко). Но я сейчас привык и кажется что удобно и понятно) Что касаемо микроконтроллеров, то вам нужно 2 доки, одна - по сути саммари конкретно на чип с его характеристиками, а вторая более подробная - reference manual, где подробно расписана вся периферия и прочее.... Удачного освоения Вот код мерцания светодиодом по прерыванию TIM4, за 5 минут написал, так что не пинайте сильно. Сам проект под STVD + raisonance в прикрепленных файлах. Частота мерцания правда чуть больше герца, с делителями баловаться не стал) Функция main: /* MAIN.C file * * Copyright (c) 2010, topkin */ #include "stm8s.h" #define LED1 GPIO_PIN_0 #define _1Hz_LSI 0xFE //******************************************************************************* // Main function //******************************************************************************* main() { // 1. Initialize HSI CLK CLK_DeInit(); // after reset Fclk = HSI / 8 = 2MHz //CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); //set prescaler CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_LSI, DISABLE, DISABLE); // set to LSI // 3. GPIO config GPIO_DeInit(GPIOD); // Configure PD0 (LED1) as output push-pull low (led switched on) GPIO_Init(GPIOD, GPIO_PIN_0, GPIO_MODE_OUT_PP_LOW_FAST); // 4. TIM4 initialization TIM4_DeInit(); CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER4, ENABLE); TIM4_TimeBaseInit(TIM4_PRESCALER_128,_1Hz_LSI); TIM4_SetAutoreload(_1Hz_LSI); TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE); TIM4_Cmd(ENABLE); enableInterrupts(); // Main loop while (1){ }; } И прерывание: void IRQ23Handler (void) interrupt 23 { GPIO_WriteReverse(GPIOD, GPIO_PIN_0); // Blink LED1 TIM4_ClearITPendingBit(TIM4_IT_UPDATE); } BlinkLED.zip Изменено 21 июля, 2010 пользователем topkin Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Stanislav_S 0 21 июля, 2010 Опубликовано 21 июля, 2010 · Жалоба Ага спасибо заработало, все оказалось просто :) Буду мучать дальше, а вот библиотека их ненравится, больно код пухлый получается, поэтому лучше руками делать ИМХО. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
topkin 0 21 июля, 2010 Опубликовано 21 июля, 2010 · Жалоба Ага спасибо заработало, все оказалось просто :) Буду мучать дальше, а вот библиотека их ненравится, больно код пухлый получается, поэтому лучше руками делать ИМХО. Не за что. Библиотека - согласен, мне тоже не нравится, как более плотно сяду на STM8, так я ее под себя перепишу Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться