|
|
  |
Проблемы с STM8 |
|
|
|
Jun 23 2010, 15:28
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(dimka76 @ Jun 23 2010, 15:23)  А чем вы прошивали контроллер до появления у вас STM8S-Discovery ? ST_Link
|
|
|
|
|
Jun 23 2010, 23:23
|

Местный
  
Группа: Свой
Сообщений: 479
Регистрация: 8-05-07
Из: г. Ставрополь. Северный Кавказ. Россия
Пользователь №: 27 606

|
Цитата(_Bill @ May 25 2010, 14:05)  В общем, пришел к выводу, что дело скорее всего не в программе, а именно в "железе". Правда, единственное в чем я отошел от рекомендаций фирмы, это величина емкости внешнего конденсатора. Фирма рекомендует значения 0.47 - 1.0 мкф. У меня стоит конденсатор номиналом 2.2 мкф. Есть призрачная надежда, что с заменой конденсатора все встанет на свои места. Но ... 2.2 мкф керамика 0805 y5v? Если да то надо заменить на электролит аналогичной ёмкости + керамику на 0.1. Звенят эти чЮдоконденсаторы(0805) на мегагерце, ничуть не хуже кварцев  .
|
|
|
|
|
Jun 24 2010, 02:13
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(Т.Достоевский @ Jun 24 2010, 03:23)  2.2 мкф керамика 0805 y5v? Если да то надо заменить на электролит аналогичной ёмкости + керамику на 0.1. Звенят эти чЮдоконденсаторы(0805) на мегагерце, ничуть не хуже кварцев  . У меня стоят танталовые чип. Емкость пробовал ставить и 2.2, и 1.0. Разницы никакой нет.
|
|
|
|
|
Jun 24 2010, 04:38
|
Частый гость
 
Группа: Свой
Сообщений: 152
Регистрация: 21-12-05
Из: Москва
Пользователь №: 12 476

|
Цитата(_Bill @ Jun 23 2010, 13:27)  В общем, дело такое. Прошил свою программу в STM8S Discovery. Все работает нормально. Так что, похоже, все упирается в STM8S103K6 (в Discovery стоит STM8S105C6). Или нет? Да, в моих двух экземплярах STM8S - DISCOVERY стоит именно STM8S105C6, думаю и у вас тоже, чай на одной китайской фабрике сделаны. Судя по всему дело было в контроллере, хотя очень странно это все, мне как то слабо верится)
|
|
|
|
|
Jul 9 2010, 07:14
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(Peps @ Jul 9 2010, 09:37)  Мельком просматривая Ваш код (в ассемблере ST8S не силен) обратил внимание, что Вы используете таймер 5, которого в микроконтроллере STM8S103K просто нету (смотрел даташит). Может быть это как то влияет на работоспособность вашей программы. Сам сейчас пишу библиотеки инициализации и отлаживаюсь на Discovery но с расчетом на 103 контроллеры, которые буду использовать. Поэтому Ваша проблема меня насторожила. Кому вопрос? Если - мне, то я таймер вообще не использую.
|
|
|
|
|
Jul 16 2010, 16:02
|
Участник

Группа: Участник
Сообщений: 44
Регистрация: 24-11-07
Пользователь №: 32 645

|
Всем привет. Решил прицепить часы реального времени 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(); вобщем ваши мнения господа
|
|
|
|
|
Jul 19 2010, 17:37
|
Участник

Группа: Участник
Сообщений: 44
Регистрация: 24-11-07
Пользователь №: 32 645

|
Всем спасибо за ответы....Разобрался сам. Надо перед стоп было ставить NACK
|
|
|
|
|
Jul 20 2010, 17:42
|
Частый гость
 
Группа: Участник
Сообщений: 163
Регистрация: 10-10-05
Пользователь №: 9 463

|
Цитата(Stanislav_S @ Jul 20 2010, 20:50)  Начал мучать потихоньку DISCОVERY, работаю с IAR, создал два проекта - один с использованием стандартной библиотеки периферии, другой без нее - так сказать все руками  Решил запустить таймер номер 4 и поморгать светодиодиком, однако что то нифига не получается ни руками ни с использованием библиотеки, нет ли у кого примера работы с таймером 4? А то весь моск сломал, но чего то не идет  для второго таймера не пойдет?
Прикрепленные файлы
Probe.zip ( 203.06 килобайт )
Кол-во скачиваний: 59
|
|
|
|
|
Jul 21 2010, 04:50
|
Частый гость
 
Группа: Свой
Сообщений: 152
Регистрация: 21-12-05
Из: Москва
Пользователь №: 12 476

|
Цитата(Stanislav_S @ Jul 20 2010, 18:50)  Начал мучать потихоньку DISCОVERY, работаю с IAR, создал два проекта - один с использованием стандартной библиотеки периферии, другой без нее - так сказать все руками  Решил запустить таймер номер 4 и поморгать светодиодиком, однако что то нифига не получается ни руками ни с использованием библиотеки, нет ли у кого примера работы с таймером 4? А то весь моск сломал, но чего то не идет  Один из первых проектов под дискавери, используется таймер 2, зажигает светодиод с частотой 1Гц по прерыванию с использованием библиотек ST. Правда использовался STVD + компилятор от raisonance. С cosmic тоже где то есть, разницы там почти нет, но искать лень. Подогнать под IAR проблем не составит.
Сообщение отредактировал topkin - Jul 21 2010, 04:51
Прикрепленные файлы
TIM2.ZIP ( 371.75 килобайт )
Кол-во скачиваний: 58
|
|
|
|
|
Jul 21 2010, 09:27
|
Частый гость
 
Группа: Свой
Сообщений: 152
Регистрация: 21-12-05
Из: Москва
Пользователь №: 12 476

|
Цитата(Stanislav_S @ Jul 21 2010, 11:53)  Ок спасибо, помучаю таймер номер 2, хотя все таки хотелось 4, поскольку из доки нифига не ясно как оно работает, дока пока только удручает своей лаконичностью  , а за примеры спасибо, буду ломать моск дальше  Так с 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); }
Сообщение отредактировал topkin - Jul 21 2010, 09:29
|
|
|
|
|
Jul 21 2010, 09:57
|
Частый гость
 
Группа: Свой
Сообщений: 152
Регистрация: 21-12-05
Из: Москва
Пользователь №: 12 476

|
Цитата(Stanislav_S @ Jul 21 2010, 13:43)  Ага спасибо заработало, все оказалось просто  Буду мучать дальше, а вот библиотека их ненравится, больно код пухлый получается, поэтому лучше руками делать ИМХО. Не за что. Библиотека - согласен, мне тоже не нравится, как более плотно сяду на STM8, так я ее под себя перепишу
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|