Программирование STM8

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
pcb
Опытный кот
Сообщения: 833
Зарегистрирован: Пт авг 12, 2011 09:14:27
Откуда: Млечный путь/Земля/РФ/Екатеринбург

Re: Программирование STM8

Сообщение pcb »

HHIMERA писал(а):В STM8L многие мелкие дисплеи можно уже мутить хардварно

Поясните чуть больше, не понял. Имеется в виду поддержка LCD?
Вольтметр-модуль можно и купить, тут нет особого смысла изобретать велосипед.

HHIMERA писал(а):вместо 2313 можно купить две STM8S003F3

Всё зависит от количества, нюансы есть и там и там
1. объем AVR нам, например, 200 шт в месяц (на изделие), в том корпусе который нам надо, что бы нам привезли удобный нам корпус из стмов,нужно брать около тыщи этих самых эстм
2. срок поставки авр в течении недели поставка после оплаты, стм от 5 до 8 недель ожидания, но бюджет жестко поделён, и я не могу, например, залезть в ФОТ для оплаты 1килоштук стм, разве что только в свою ЗП, что мне не надо.
3. для перехода на другой процессор нужно:
3.1. переписать код, гдето легко, гдето можно умом пойти.
3.2. отрассировать новые платы
3.3. заплатить за изготовление новых плат (подготовка, шаблоны)
3.4. монтажницам нужно время что бы всё запомнить, конечно, есть бумаги, документация, но при большом объеме лишний раз читать бумажку не совсем хорошо
3.5. поддержка потребуется и новым платам.
3.6. пункты 3.1-3.5 кто то должен делать

PS осталось поправить 39 ерроров хардваре зависимых :shock:
Разработал:
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: Программирование STM8

Сообщение HHIMERA »

Если всё так плохо... то и не вижу смысла заморачиваться... При переходе с STM на АВР проблем было бы не меньше...
В общем... тут обсуждать то и нечего...

Имеется в виду поддержка LCD?

Не только чисто стекляшки... Те же HD44780... мелкие от мобилок... LED семисегментники... типа MT10t7 и пр. ...
DMA и таймер в STM8L делают чудеса...
"Я не даю готовых решений, я заставляю думать!"(С)
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Программирование STM8

Сообщение oleg110592 »

в том корпусе который нам надо, что бы нам привезли удобный нам корпус из стмов,нужно брать около тыщи

стало интересно - какие же это корпуса, имхо стм SSOP20 намного удобнее чем авр SOIC20
pcb
Опытный кот
Сообщения: 833
Зарегистрирован: Пт авг 12, 2011 09:14:27
Откуда: Млечный путь/Земля/РФ/Екатеринбург

Re: Программирование STM8

Сообщение pcb »

HHIMERA писал(а):Если всё так плохо... то и не вижу смысла заморачиваться... При переходе с STM на АВР проблем было бы не меньше...
В общем... тут обсуждать то и нечего...

Есть ещё такая штука, как унификация используемой элементной базы.

В разовом устройстве или хобби без разницы какой проц.
Разработал:
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: Программирование STM8

Сообщение HHIMERA »

pcb писал(а):Есть ещё такая штука, как унификация используемой элементной базы.

Дык... тады всё не в пользу АВР...
"Я не даю готовых решений, я заставляю думать!"(С)
pcb
Опытный кот
Сообщения: 833
Зарегистрирован: Пт авг 12, 2011 09:14:27
Откуда: Млечный путь/Земля/РФ/Екатеринбург

Re: Программирование STM8

Сообщение pcb »

HHIMERA писал(а):тады всё не в пользу АВР

Самая короткая дорога, та, которую знаешь - народная мудрость. :tea:

Удачных выходных.
Разработал:
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
Аватара пользователя
alex38779
Потрогал лапой паяльник
Сообщения: 386
Зарегистрирован: Чт окт 31, 2013 10:54:32
Контактная информация:

Программирование STM8

Сообщение alex38779 »

Изучаю stm8, добрался до прерываний..

Прочитал статью http://we.easyelectronics.ru/STM8/8l-ku ... -exti.html , решил попробовать подобное сделать на stm8.

Плата такая http://www.st.com/web/catalog/tools/FM1 ... 3/PF252276

Ну и вопрос как объявить внешнее прерывания правильно. Или скиньте пример.
И еще как сбросить флаг внешнего прерывания, или тут не надо?

Есть только прерывания от портов: EXTI0.....EXTI4

Таблица векторов
Спойлер

Код: Выделить всё

/*----------
 *      Interrupt vector numbers
 *----------*/
#define AWU_vector                           0x03
#define CLK_CSS_vector                       0x04
#define CLK_SWITCH_vector                    0x04
#define beCAN_FMP_vector                     0x0A
#define beCAN_FULL_vector                    0x0A
#define beCAN_FOVR_vector                    0x0A
#define beCAN_EWGF_vector                    0x0B
#define beCAN_EPVF_vector                    0x0B
#define beCAN_BOFF_vector                    0x0B
#define beCAN_LEC0_vector                    0x0B
#define beCAN_LEC1_vector                    0x0B
#define beCAN_LEC2_vector                    0x0B
#define beCAN_RQCP0_vector                   0x0B
#define beCAN_RQCP1_vector                   0x0B
#define beCAN_RQCP2_vector                   0x0B
#define beCAN_WKUI_vector                    0x0B
#define SPI_TXE_vector                       0x0C
#define SPI_RXNE_vector                      0x0C
#define SPI_WKUP_vector                      0x0C
#define SPI_MODF_vector                      0x0C
#define SPI_OVR_vector                       0x0C
#define SPI_CRCERR_vector                    0x0C
#define TIM1_OVR_UIF_vector                  0x0D
#define TIM1_CAPCOM_BIF_vector               0x0D
#define TIM1_CAPCOM_TIF_vector               0x0D
#define TIM1_CAPCOM_CC1IF_vector             0x0E
#define TIM1_CAPCOM_CC2IF_vector             0x0E
#define TIM1_CAPCOM_CC3IF_vector             0x0E
#define TIM1_CAPCOM_CC4IF_vector             0x0E
#define TIM1_CAPCOM_COMIF_vector             0x0E
#define TIM2_OVR_UIF_vector                  0x0F
#define TIM2_CAPCOM_TIF_vector               0x10
#define TIM2_CAPCOM_CC1IF_vector             0x10
#define TIM2_CAPCOM_CC2IF_vector             0x10
#define TIM2_CAPCOM_CC3IF_vector             0x10
#define TIM3_OVR_UIF_vector                  0x11
#define TIM3_CAPCOM_TIF_vector               0x12
#define TIM3_CAPCOM_CC1IF_vector             0x12
#define TIM3_CAPCOM_CC2IF_vector             0x12
#define TIM3_CAPCOM_CC3IF_vector             0x12
#define UART1_T_TXE_vector                   0x13
#define UART1_T_TC_vector                    0x13
#define UART1_R_RXNE_vector                  0x14
#define UART1_R_OR_vector                    0x14
#define UART1_R_IDLE_vector                  0x14
#define UART1_R_PE_vector                    0x14
#define UART1_R_LBDF_vector                  0x14
#define I2C_SB_vector                        0x15
#define I2C_ADDR_vector                      0x15
#define I2C_ADD10_vector                     0x15
#define I2C_STOPF_vector                     0x15
#define I2C_BTF_vector                       0x15
#define I2C_WUFH_vector                      0x15
#define I2C_RXNE_vector                      0x15
#define I2C_TXE_vector                       0x15
#define I2C_BERR_vector                      0x15
#define I2C_ARLO_vector                      0x15
#define I2C_AF_vector                        0x15
#define I2C_OVR_vector                       0x15
#define UART3_T_TXE_vector                   0x16
#define UART3_T_TC_vector                    0x16
#define UART3_R_RXNE_vector                  0x17
#define UART3_R_OR_vector                    0x17
#define UART3_R_IDLE_vector                  0x17
#define UART3_R_PE_vector                    0x17
#define UART3_R_LBDF_vector                  0x17
#define UART3_R_LHDF_vector                  0x17
#define ADC2_AWDG_vector                     0x18
#define ADC2_EOC_vector                      0x18
#define TIM4_OVR_UIF_vector                  0x19
#define FLASH_EOP_vector                     0x1A
#define FLASH_WR_PG_DIS_vector               0x1A


PS... нашел статью, так можно делать? http://blog.mark-stevens.co.uk/2012/08/ ... the-stm8s/
Аватара пользователя
alex38779
Потрогал лапой паяльник
Сообщения: 386
Зарегистрирован: Чт окт 31, 2013 10:54:32
Контактная информация:

Re: Программирование STM8

Сообщение alex38779 »

Как установить библиотеку STM8 Firmware library в IAR? :(
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Программирование STM8

Сообщение oleg110592 »

Посмотреть как сделано в готовом шаблоне или воспользоваться шаблоном.
Наипростейший путь создания нового проекта - это воспользоваться шаблоном-примером. В каждом архиве периферийной библиотеки имеется такой пример, который после разархивирования находится в папке ProjectSTM8S_StdPeriph_TemplateEWSTM8.

http://www.compel.ru/lib/ne/2013/8/8-st ... srede-iar/
Аватара пользователя
alex38779
Потрогал лапой паяльник
Сообщения: 386
Зарегистрирован: Чт окт 31, 2013 10:54:32
Контактная информация:

Re: Программирование STM8

Сообщение alex38779 »

Не могу разобраться с внешними прерываниями, уже третий день мучаюсь.. При нажатии на кнопку меняет свое состояние светодиод.

платка такая http://www.st.com/st-web-ui/static/acti ... 040810.pdf
Спойлер

Код: Выделить всё

#include <intrinsics.h>
#include <iostm8s103f3.h>

#pragma vector = 8
__interrupt void EXTI_PORTB_IRQHandler(void)
{
    PD_ODR_bit.ODR7 = 1;     
}


void main()
{
  __disable_interrupt();
  //настройка led
  PD_DDR_bit.DDR0=1;
  PD_ODR_bit.ODR0=0;
  PD_CR1_bit.C10=1;
  //настройка кнопки
  PB_DDR_bit.DDR7=0;
  PB_CR1_bit.C17=0;
  PB_CR2_bit.C27=1;
 
  EXTI_CR1_PBIS=0;
  EXTI_CR2_TLIS=0;
   __enable_interrupt();
   while (1)
   {
      __wait_for_interrupt();
   }
}


Помогите исправить ошибку. Где что не так.
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: Программирование STM8

Сообщение HHIMERA »

Во-первых... Данный МК не очень подходит для обучения... ресурс флэш мал...
Во-вторых... настраивается PD_ODR_bit.ODR0 ... а в прерывании юзается PD_ODR_bit.ODR7...
"Я не даю готовых решений, я заставляю думать!"(С)
Аватара пользователя
alex38779
Потрогал лапой паяльник
Сообщения: 386
Зарегистрирован: Чт окт 31, 2013 10:54:32
Контактная информация:

Re: Программирование STM8

Сообщение alex38779 »

HHIMERA писал(а):Во-вторых... настраивается PD_ODR_bit.ODR0 ... а в прерывании юзается PD_ODR_bit.ODR7...


Исправил. Но все ровно не работает. Походу неправильно настроил регистры отвечающие за прерывания. Перевел я с даташипа:

Эти биты можно записать только тогда, когда I1 и I0 в регистре CCR оба установлены в 1 (уровень 3).

СпойлерBits 7:6PDIS[1:0]:
Port D external interrupt sensitivity bits
These bits can only be written when I1 and I0 in the CCR register are both set to 1 (level 3).
They define the sensitivity of Port D external interrupts.
00: Falling edge and low level
01: Rising edge only
10: Falling edge
....


Может из за этого?
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Программирование STM8

Сообщение oleg110592 »

а пример из SPL работает?
This example provides a short description of how to use the EXTI peripheral:
- Configuration of External Interrupt / Falling edge and TLI
- LEDs are toggling at each interrupt detection
Аватара пользователя
alex38779
Потрогал лапой паяльник
Сообщения: 386
Зарегистрирован: Чт окт 31, 2013 10:54:32
Контактная информация:

Re: Программирование STM8

Сообщение alex38779 »

oleg110592 писал(а):а пример из SPL работает?


Тыкните носом как кота, где пример этот можно найти..
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Программирование STM8

Сообщение oleg110592 »

stsw-stm8069.zip\STM8S_StdPeriph_Lib_V2.1.0\Project\STM8S_StdPeriph_Examples\EXTI\EXTI_InterruptPriority\
отсюда http://www.st.com/web/en/catalog/tools/PF258009
Аватара пользователя
alex38779
Потрогал лапой паяльник
Сообщения: 386
Зарегистрирован: Чт окт 31, 2013 10:54:32
Контактная информация:

Re: Программирование STM8

Сообщение alex38779 »

oleg110592 писал(а):stsw-stm8069.zip\STM8S_StdPeriph_Lib_V2.1.0\Project\STM8S_StdPeriph_Examples\EXTI\EXTI_InterruptPriority\


Работает. Эта же программа изначально залита в дискавери?

И написано с использованием библиотеки. А меня интересует код без использования библиотеки, то есть работа с битами и регистрами.
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Программирование STM8

Сообщение oleg110592 »

далее на непонятной функции SPL правой кнопкой мыши:
Изображение
смотрим, например для порта B как выглядит внутри:

Код: Выделить всё

        EXTI->CR1 &= (uint8_t)(~EXTI_CR1_PBIS);
        EXTI->CR1 |= (uint8_t)((uint8_t)(SensitivityValue) << 2);

где также смотрим:

Код: Выделить всё

#define EXTI_CR1_PBIS ((uint8_t)0x0C) /*!< PORTB external interrupt sensitivity bits mask */
EXTI_SENSITIVITY_FALL_ONLY = (uint8_t)0x02, /*!< Interrupt on Falling edge only */

и так далее
все это копируем себе в проект и получаем
код без использования библиотеки, то есть работа с битами и регистрами
Аватара пользователя
alex38779
Потрогал лапой паяльник
Сообщения: 386
Зарегистрирован: Чт окт 31, 2013 10:54:32
Контактная информация:

Re: Программирование STM8

Сообщение alex38779 »

oleg110592 писал(а):далее на непонятной функции SPL правой кнопкой мыши:


Спасибо! Разобрался! Заработало :) :))
Аватара пользователя
Yusff
Встал на лапы
Сообщения: 124
Зарегистрирован: Сб окт 20, 2012 14:07:16

Re: Программирование STM8

Сообщение Yusff »

Столкнулся с маленькой проблемой. Написал код термометра 1-wire для stm8s103. Задержки по прерываниям таймера 2:
Спойлер

Код: Выделить всё

#pragma vector=TIM2_OVR_UIF_vector
__interrupt void TIM2_OVF_UIF_handler (void)
{
    if (rdflg)
    {
        PINO_1W=DWN;
        asm("nop");
        PINO_1W=UP;
        asm("nop");
        owbit=0;
        if (PINI_1W)
            owbit=1;
        rdflg=0;
    }
    if (wrflg)
    {
        PINO_1W=UP;
        wrflg=0;
    }
    TIM2_CR1_CEN=0;
    TIM2_SR1_UIF=0;
}

void cpu_init()
{
    //настройка таймера для таймингов 1-wire
    TIM2_PSCR=2; // 2000000/4 => 2 мкс
    TIM2_IER_UIE=1;
    TIM2_CR1_CEN=0;
    //включение приоритета прерываний (у tim2 - выше)
    CPU_CCR_I0=1;
    CPU_CCR_I1=0;
}

bool OneWire_Reset (void)
{
    TIM2_CNTRH=255;
    TIM2_CNTRL=255-250; //500 мкс
    wrflg=1;
    TIM4_IER_UIE=0; //отключаем прерывания динамической индикации
    TIM2_CR1_CEN=1;
    PINO_1W=DWN; //даем импульс reset
    TIM4_IER_UIE=1; //включаем прерывания динамической индикации
    while (wrflg);
    TIM2_CNTRH=255;
    TIM2_CNTRL=255-30;
    wrflg=1;
    TIM2_CR1_CEN=1;
    while (wrflg); //ждем 60 мкс
    if (PINI_1W)
        return 0; //если нет presence
    else
    {
        TIM2_CNTRH=255;
        TIM2_CNTRL=255-210;
        wrflg=1;
        TIM2_CR1_CEN=1;
        while (wrflg); //ждем еще 420 мкс
        if (PINI_1W)
            return 1;
        else
            return 0;
    }
}

Так вот, первый Reset не проходит: получается короткий (~100 мкс). А дальше все работает как часы. Пробовал TIM2_CNTRL грузить первым - та же ерунда. Знатоки stm, помогите, плиз!
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: Программирование STM8

Сообщение HHIMERA »

При инициализации таймера нужно установить TIM_EGR_UG... чтобы новые значения загрузились в регистры таймера из регистров предзагрузки...
"Я не даю готовых решений, я заставляю думать!"(С)
Ответить

Вернуться в «Разные вопросы по МК»