Например TDA7294

Форум РадиоКот • Просмотр темы - Программирование STM8
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пн ноя 17, 2025 09:59:46

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 2579 ]     ... , , , 119, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Сб сен 02, 2023 14:46:38 
Держит паяльник хвостом
Аватар пользователя

Карма: 16
Рейтинг сообщений: 204
Зарегистрирован: Вс дек 02, 2012 16:58:33
Сообщений: 932
Откуда: от туда
Рейтинг сообщения: 0
Всё верно, можно даже не переводить в 16-ти ричный формат.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Вс сен 03, 2023 07:21:47 
Открыл глаза

Карма: 4
Рейтинг сообщений: 17
Зарегистрирован: Вс ноя 13, 2022 14:58:17
Сообщений: 53
Рейтинг сообщения: 0
Большое спасибо за статью. Мне очень понравилось. Написано простыми словами. Очень легко читать. Пожалуй прочитаю весь цикл статей этого автора по теме STM8. Но тут ответ на мой вопрос все же не полный. По сути можно не заморачиваться и пользоваться готовой таблицей из заголовочного файла IOSTM8S103F3.h(ведь не зря же он подключен :) ) , но мне все же хотелось бы разобраться до конца. Как получилась эта таблица в заголовочном файле?
Вот таблица из DataSheet
Изображение
Нужно брать номер вектора прерывания из первого столбца таблицы, прибавлять к нему 2, а затем переводить в шестнадцатеричный формат? Т.е. для TIM2 capture/compare это значение будет 14+2=16(dec)=10(hex),верно?

Все вектора описаны в системном заголовочном файле
Код:
#define AWU_vector                            3 /* IRQ No. in STM8 manual:  1 */
#define CLK_CSS_vector                        4 /* IRQ No. in STM8 manual:  2 */
#define CLK_SWITCH_vector                     4 /* IRQ No. in STM8 manual:  2 */
#define EXTI0_vector                          5 /* IRQ No. in STM8 manual:  3 */
#define EXTI1_vector                          6 /* IRQ No. in STM8 manual:  4 */
#define EXTI2_vector                          7 /* IRQ No. in STM8 manual:  5 */
#define EXTI3_vector                          8 /* IRQ No. in STM8 manual:  6 */
#define EXTI4_vector                          9 /* IRQ No. in STM8 manual:  7 */
#define SPI_CRCERR_vector                    12 /* IRQ No. in STM8 manual: 10 */
#define SPI_MODF_vector                      12 /* IRQ No. in STM8 manual: 10 */
#define SPI_OVR_vector                       12 /* IRQ No. in STM8 manual: 10 */
#define SPI_RXNE_vector                      12 /* IRQ No. in STM8 manual: 10 */
#define SPI_TXE_vector                       12 /* IRQ No. in STM8 manual: 10 */
#define SPI_WKUP_vector                      12 /* IRQ No. in STM8 manual: 10 */
#define TIM1_CAPCOM_BIF_vector               13 /* IRQ No. in STM8 manual: 11 */
#define TIM1_CAPCOM_TIF_vector               13 /* IRQ No. in STM8 manual: 11 */
#define TIM1_OVR_UIF_vector                  13 /* IRQ No. in STM8 manual: 11 */
#define TIM1_CAPCOM_CC1IF_vector             14 /* IRQ No. in STM8 manual: 12 */
#define TIM1_CAPCOM_CC2IF_vector             14 /* IRQ No. in STM8 manual: 12 */
#define TIM1_CAPCOM_CC3IF_vector             14 /* IRQ No. in STM8 manual: 12 */
#define TIM1_CAPCOM_CC4IF_vector             14 /* IRQ No. in STM8 manual: 12 */
#define TIM1_CAPCOM_COMIF_vector             14 /* IRQ No. in STM8 manual: 12 */
#define TIM2_OVR_UIF_vector                  15 /* IRQ No. in STM8 manual: 13 */
#define TIM2_CAPCOM_CC1IF_vector             16 /* IRQ No. in STM8 manual: 14 */
#define TIM2_CAPCOM_CC2IF_vector             16 /* IRQ No. in STM8 manual: 14 */
#define TIM2_CAPCOM_CC3IF_vector             16 /* IRQ No. in STM8 manual: 14 */
#define TIM2_CAPCOM_TIF_vector               16 /* IRQ No. in STM8 manual: 14 */
#define UART1_T_TC_vector                    19 /* IRQ No. in STM8 manual: 17 */
#define UART1_T_TXE_vector                   19 /* IRQ No. in STM8 manual: 17 */
#define UART1_R_IDLE_vector                  20 /* IRQ No. in STM8 manual: 18 */
#define UART1_R_LBDF_vector                  20 /* IRQ No. in STM8 manual: 18 */
#define UART1_R_OR_vector                    20 /* IRQ No. in STM8 manual: 18 */
#define UART1_R_PE_vector                    20 /* IRQ No. in STM8 manual: 18 */
#define UART1_R_RXNE_vector                  20 /* IRQ No. in STM8 manual: 18 */
#define I2C_ADD10_vector                     21 /* IRQ No. in STM8 manual: 19 */
#define I2C_ADDR_vector                      21 /* IRQ No. in STM8 manual: 19 */
#define I2C_AF_vector                        21 /* IRQ No. in STM8 manual: 19 */
#define I2C_ARLO_vector                      21 /* IRQ No. in STM8 manual: 19 */
#define I2C_BERR_vector                      21 /* IRQ No. in STM8 manual: 19 */
#define I2C_BTF_vector                       21 /* IRQ No. in STM8 manual: 19 */
#define I2C_OVR_vector                       21 /* IRQ No. in STM8 manual: 19 */
#define I2C_RXNE_vector                      21 /* IRQ No. in STM8 manual: 19 */
#define I2C_SB_vector                        21 /* IRQ No. in STM8 manual: 19 */
#define I2C_STOPF_vector                     21 /* IRQ No. in STM8 manual: 19 */
#define I2C_TXE_vector                       21 /* IRQ No. in STM8 manual: 19 */
#define I2C_WUFH_vector                      21 /* IRQ No. in STM8 manual: 19 */
#define ADC1_AWDG_vector                     24 /* IRQ No. in STM8 manual: 22 */
#define ADC1_AWS0_vector                     24 /* IRQ No. in STM8 manual: 22 */
#define ADC1_AWS1_vector                     24 /* IRQ No. in STM8 manual: 22 */
#define ADC1_AWS2_vector                     24 /* IRQ No. in STM8 manual: 22 */
#define ADC1_AWS3_vector                     24 /* IRQ No. in STM8 manual: 22 */
#define ADC1_AWS4_vector                     24 /* IRQ No. in STM8 manual: 22 */
#define ADC1_AWS5_vector                     24 /* IRQ No. in STM8 manual: 22 */
#define ADC1_AWS6_vector                     24 /* IRQ No. in STM8 manual: 22 */
#define ADC1_AWS7_vector                     24 /* IRQ No. in STM8 manual: 22 */
#define ADC1_AWS8_vector                     24 /* IRQ No. in STM8 manual: 22 */
#define ADC1_AWS9_vector                     24 /* IRQ No. in STM8 manual: 22 */
#define ADC1_EOC_vector                      24 /* IRQ No. in STM8 manual: 22 */
#define TIM4_OVR_UIF_vector                  25 /* IRQ No. in STM8 manual: 23 */
#define FLASH_EOP_vector                     26 /* IRQ No. in STM8 manual: 24 */
#define FLASH_WR_PG_DIS_vector               26 /* IRQ No. in STM8 manual: 24 */


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Вс сен 03, 2023 13:22:48 
Друг Кота

Карма: 67
Рейтинг сообщений: 1964
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12867
Рейтинг сообщения: 0
Bill_, все вектора описаны в даташите. "Системный заголовочный файл" не является ни обязательным, ни стандартом. Он идёт со средой разработки, библиотеками и т.д., может быть различным (вот приведённого Вами у меня нет и никогда не было), может не генерироваться при создании проекта, а кто-то может вообще пишет в блокноте и скармливает компилятору в командной строке.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Вс сен 03, 2023 13:34:33 
Грызет канифоль

Зарегистрирован: Пн фев 10, 2014 19:40:03
Сообщений: 256
Рейтинг сообщения: 0
Все вектора описаны в системном заголовочном файле

Большое спасибо за ответ. С этим я уже разобрался. :)
Бегло пробежался по заголовочному файлу. Там много чего непонятного написано :dont_know: . Хотелось бы во всем этом разобраться. Может есть какая литература на эту тему?
Сейчас параллельно читаю
- Основы микропроцессорной техники: микроконтроллеры
STM8S
: учебное пособие / С.Н. Торгаев, И.С. Мусоров, Д.С. Чертихина
и др.; Томский политехнический университет. − Томск: Изд-во Томско-
го политехнического университета, 2014. – 130 с.
- Начало работы с микроконтроллерами STM8. Матюшов Николай Викторович.
- Лосев, С.А. Построение информационно-измерительных систем на базе МК STM8: учебное по-собие / С.А.Лосев; Балт. гос. техн. ун-т. – СПб., 2017. – 33 с.
- Практическое руководство по программированию STM-микроконтроллеров: учебное пособие / С.Н. Торгаев, И.С. Мусоров, Д.С. Чертихина
- Лабораторный практикум по изучению микроконтроллеров STM8 на базе
отладочного модуля STM8S Value Line Discovery
/ Бугаев В.И., Мусиенко М.П.,
Крайнык Я.М. – Москва-Николаев: МФТИ-ЧГУ, 2013. – 24 с.
- Лосев, С.А. Микропроцессорные системы и устройства: лабораторный практикум /
С.А. Лосев; Балт. гос. техн. ун-т. – СПб., 2019. – 46 с.
- Керниган Б., Ритчи Д. Язык программирования Си Пер. с англ., 3-е изд., испр. —
СПб.: "Невский Диалект", 2001. - 352 с: ил.
Конечно же DataSheet и Reference manual + статьи из интернета. Но как видите, вопросы все равно появляются. Спросить мне не у кого, поэтому задаю вопросы здесь. Большое спасибо всем за ответы. Стараюсь конечно же не злоупотреблять вашей помощью :) Поэтому, думаю, чем большей информацией я буду владеть, тем меньше вопросов у меня будет возникать в процессе изучения. Точнее сказать, тем больше вероятность, что я найду ответы на свои вопросы в имеющемся у меня материале.


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Чт сен 07, 2023 15:31:50 
Открыл глаза

Карма: 4
Рейтинг сообщений: 17
Зарегистрирован: Вс ноя 13, 2022 14:58:17
Сообщений: 53
Рейтинг сообщения: 0
Bill_, все вектора описаны в даташите. "Системный заголовочный файл" не является ни обязательным, ни стандартом. Он идёт со средой разработки, библиотеками и т.д., может быть различным (вот приведённого Вами у меня нет и никогда не было), может не генерироваться при создании проекта, а кто-то может вообще пишет в блокноте и скармливает компилятору в командной строке.

Хм... Я сам никогда этим не пользовался. Я сделал свою таблицу векторов на ассемблере и включаю этот файл в свои проекты.

Добавлено after 4 minutes 26 seconds:
Все вектора описаны в системном заголовочном файле

Большое спасибо за ответ. С этим я уже разобрался. :)
Бегло пробежался по заголовочному файлу. Там много чего непонятного написано :dont_know: . Хотелось бы во всем этом разобраться. Может есть какая литература на эту тему?
СпойлерСейчас параллельно читаю
- Основы микропроцессорной техники: микроконтроллеры
STM8S
: учебное пособие / С.Н. Торгаев, И.С. Мусоров, Д.С. Чертихина
и др.; Томский политехнический университет. − Томск: Изд-во Томско-
го политехнического университета, 2014. – 130 с.
- Начало работы с микроконтроллерами STM8. Матюшов Николай Викторович.
- Лосев, С.А. Построение информационно-измерительных систем на базе МК STM8: учебное по-собие / С.А.Лосев; Балт. гос. техн. ун-т. – СПб., 2017. – 33 с.
- Практическое руководство по программированию STM-микроконтроллеров: учебное пособие / С.Н. Торгаев, И.С. Мусоров, Д.С. Чертихина
- Лабораторный практикум по изучению микроконтроллеров STM8 на базе
отладочного модуля STM8S Value Line Discovery
/ Бугаев В.И., Мусиенко М.П.,
Крайнык Я.М. – Москва-Николаев: МФТИ-ЧГУ, 2013. – 24 с.
- Лосев, С.А. Микропроцессорные системы и устройства: лабораторный практикум /
С.А. Лосев; Балт. гос. техн. ун-т. – СПб., 2019. – 46 с.
- Керниган Б., Ритчи Д. Язык программирования Си Пер. с англ., 3-е изд., испр. —
СПб.: "Невский Диалект", 2001. - 352 с: ил.
Конечно же DataSheet и Reference manual + статьи из интернета. Но как видите, вопросы все равно появляются. Спросить мне не у кого, поэтому задаю вопросы здесь. Большое спасибо всем за ответы. Стараюсь конечно же не злоупотреблять вашей помощью :) Поэтому, думаю, чем большей информацией я буду владеть, тем меньше вопросов у меня будет возникать в процессе изучения. Точнее сказать, тем больше вероятность, что я найду ответы на свои вопросы в имеющемся у меня материале.

Не стесняйтесь, задавайте свои "глупые" вопросы.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Чт сен 07, 2023 16:35:38 
Друг Кота

Карма: 67
Рейтинг сообщений: 1964
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12867
Рейтинг сообщения: 0
Хм... Я сам никогда этим не пользовался. Я сделал свою таблицу векторов на ассемблере и включаю этот файл в свои проекты.
Вот именно :wink: у меня тоже свой вариант, удобный мне.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Вт окт 03, 2023 21:56:57 
Грызет канифоль

Зарегистрирован: Пн фев 10, 2014 19:40:03
Сообщений: 256
Рейтинг сообщения: 0
Здравствуйте.
Пишу программу для STM8S103F3P6
Подскажите, пожалуйста, где ошибка?

Код:
void interrupt_init(void);

#pragma vector=TIM1_OVR_UIF_vector
 __interrupt void Pin6_interrupt(void)
{
 k++;
  if (k == 9)
 {
   k = 1;
 }
 x=6;
  TIM1_SR1_bit.UIF = 0; //Cброс флага прерывания
}


if (x >= 5 && x < 10)
 {
   PB_ODR_bit.ODR5 = !PB_ODR_bit.ODR5;
 }


Компилятор в IAR ошибок не выдал, но при х = 6 , например, программа не заходит в тело оператора.
Точнее сказать, если объявить х=6 в прерывании, то программа не заходит в тело оператора. Если объявить х=6 в основной программе, то условие выполнится и программа выполнит тело оператора.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Ср окт 04, 2023 00:02:47 
Первый раз сказал Мяу!

Зарегистрирован: Ср июн 03, 2015 21:39:14
Сообщений: 25
Рейтинг сообщения: 0
Видимо если объявить переменную внутри функции, обрабатывающей прерывание, то и видна она будет только внутри этой самой функции... это называется область видимости переменных...
Если Вам нужна переменная, видимая отовсюду, объявляйте ее в глобальной области видимости, т.е. до начала функции main


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Ср окт 04, 2023 00:09:46 
Грызет канифоль

Зарегистрирован: Пн фев 10, 2014 19:40:03
Сообщений: 256
Рейтинг сообщения: 0
Все переменные у меня объявлены в самом начале

Код:
#include "IOSTM8S103F3.h"
int x=0,k=1;
char i=1,j=0;


int interrupt_init(void);

#pragma vector=TIM1_OVR_UIF_vector
 __interrupt void Pin6_interrupt(void)
{
 k++;
  if (k == 9)
 {
   k = 1;
 }
 x=6;
  TIM1_SR1_bit.UIF = 0; //Cброс флага прерывания
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Ср окт 04, 2023 00:14:53 
Друг Кота

Карма: 67
Рейтинг сообщений: 1964
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12867
Рейтинг сообщения: 0
во-первых, если нет каких-то особых причин, то сброс флага прерывания делается в начале.
во-вторых, чтобы прерывания сработали, их надо включить.
в-третьих, начинающим настоятельно рекомендуется приводить весь код программы, а не участки, где по их соображению может быть ошибка, потому что это соображение рискует быть неверным, и здесь именно так.

Добавлено after 1 minute 46 seconds:
и почему у прагмы и функции обработки прерывания столь разные наименования? первая на таймер, вторая на вход... непонятно.

Поставьте breakpoint внутри функции обработки прерывания и в режиме отладчика посмотрите, попадает ли туда выполнение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Ср окт 04, 2023 00:25:27 
Грызет канифоль

Зарегистрирован: Пн фев 10, 2014 19:40:03
Сообщений: 256
Рейтинг сообщения: 0
Вот код программы

Код:
#include "IOSTM8S103F3.h"
int x=0,k=1;
char i=1,j=0;


int interrupt_init(void);

#pragma vector=TIM1_OVR_UIF_vector
 __interrupt void Pin6_interrupt(void)
{
 k++;
  if (k == 9)
 {
   k = 1;
 }
 x++;
  if (x == 10000)
 {
   x = 0;
 }
  TIM1_SR1_bit.UIF = 0; //Cброс флага прерывания
}

int main (void)
{
   
   PB_DDR_bit.DDR5 = 1; // Настройка 5-го бита порта B на вывод.
   PB_ODR_bit.ODR5 = 1; // Гашение светодиода.
   PB_CR1_bit.C15 = 1; // Переключение порта в режим push-pull.
   PB_CR2_bit.C25 = 0; // Cкорость переключения до 2 МГц
   
   //Частота переполнений = 2000000Гц / 4 / 500 = 1000 Гц(1 мс)
  TIM1_PSCRH = 0x00;//записываем 2 старших байта числа 3(4-1) в hex формате в регистр предделителя
  TIM1_PSCRL = 0x03;//записываем 2 младших байта числа 3(4-1)в hex формате в регистр предделителя
  TIM1_ARRH = 0x01; //записываем 2 старших байта числа 500 в hex формате в регистр автоперезагруски
  TIM1_ARRL = 0xF4; //записываем 2 младших байта числа 500 в hex формате в регистр автоперезагруски

  TIM1_CR1_bit.DIR = 0; // Cчет вверх
  TIM1_CR1_bit.URS = 1; //Прерывание только по переполнению счетчика
  TIM1_EGR_bit.UG = 1;  //Вызываем Update Event для загрузки предделителя

  TIM1_IER_bit.UIE = 1; //Разрешаем прерывание
  TIM1_CR1_bit.CEN = 1; //Запускаем таймер

  asm("rim");
  while(1)
  {
    if (x < 1000)
 {
   PB_ODR_bit.ODR5 = 0;
 }
 
 if ((x >= 1000) && (x < 2000))
 {
   PB_ODR_bit.ODR5 = 1;
 }
 
if ((x >= 2000) && (x < 3000))
 {
   PB_ODR_bit.ODR5 = 0;
 }
 
 if ((x >= 3000) && (x < 4000))
 {
   PB_ODR_bit.ODR5 = 1;
 }
 
 if ((x >= 4000) && (x < 5000))
 {
   PB_ODR_bit.ODR5 = 0;
 }
 
 if ((x >= 5000) && (x < 6000))
 {
   PB_ODR_bit.ODR5 = 1;
 }
 
 if ((x >= 6000) && (x < 7000))
 {
   PB_ODR_bit.ODR5 = 0;
 }
 
 if ((x >= 7000) && (x < 8000))
 {
   PB_ODR_bit.ODR5 = 1;
 }
 
  if ((x >= 8000) && (x < 9000))
 {
   PB_ODR_bit.ODR5 = 0;
 }

 if ((x >= 9000) && (x < 10000))
 {
   PB_ODR_bit.ODR5 = 1;
 }
 }
  }


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Ср окт 04, 2023 00:35:04 
Друг Кота

Карма: 67
Рейтинг сообщений: 1964
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12867
Рейтинг сообщения: 0
В периферии необходимо тактирование таймера включить, то есть, подать на него частоту. Наверное, в CLK_PCKENR1 или CLK_PCKENR2 , я не помню уже. Сейчас таймер просто не тактируется и не считает, а раз не считает, то и прерывания нет.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Ср окт 04, 2023 01:40:37 
Грызет канифоль

Зарегистрирован: Пн фев 10, 2014 19:40:03
Сообщений: 256
Рейтинг сообщения: 0
А как поставить этот бит?
Если написать так CLK_PCKENR1_bit.PCKEN17 = 1;
То компилятор выдает ошибку Error[Pe020]: identifier "CLK_PCKENR1_bit" is undefined
Если записать единицу в весь регистр CLK_PCKENR1 = 1; то компиляция проходит без ошибок. Но результата это не приносит. При этом в прерывания программа вообще перестает заходить.
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Ср окт 04, 2023 02:05:14 
Друг Кота

Карма: 67
Рейтинг сообщений: 1964
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12867
Рейтинг сообщения: 0
CLK_PCKENR1 |= 0x80;

Добавлено after 7 minutes 52 seconds:
вообще, в даташите сказано, что значение по умолчанию этого регистра 0xFF, то есть, вся периферия включена. Раз "в прерывания программа вообще перестает заходить.", значит, раньше заходила, тогда так и надо было сказать, что прерывания отрабатывают, значит, тактирование работает... ошибка где-то в другом месте. Может, watchdog тоже по умолчанию включен.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Ср окт 04, 2023 08:06:00 
Грызет канифоль

Зарегистрирован: Пн фев 10, 2014 19:40:03
Сообщений: 256
Рейтинг сообщения: 0
Я подумал, что неправильно понял даташит. Если люди(гораздо опытнее меня) что-то советуют, значит это нужно делать беспрекословно. :)
У меня есть еще вот такая программа
Код:
#include "iostm8s103f3.h"

void interrupt_init(void);

#pragma vector=TIM1_OVR_UIF_vector
 __interrupt void Pin6_interrupt(void)
{
 PB_ODR_bit.ODR5 ^= 1; //Инвертировать значение 5 бита порта PB

 TIM1_SR1_bit.UIF = 0; //Сброс флага прерывания
}

int main( void )
{
 
  PB_DDR_bit.DDR5 = 1;
  PB_CR1_bit.C15 = 0;
//Частота переполнений = 2000000Гц / 400 / 1000 = 5 Гц
  TIM1_PSCRH = 0x01;//записываем 2 старших байта числа 399(4-1) в hex формате в регистр предделителя
  TIM1_PSCRL = 0x8F;//записываем 2 младших байта числа 399(4-1)в hex формате в регистр предделителя
  TIM1_ARRH = 0x03; //записываем 2 старших байта числа 1000 в hex формате в регистр автоперезагруски
  TIM1_ARRL = 0xE8; //записываем 2 младших байта числа 1000 в hex формате в регистр автоперезагруски

  TIM1_CR1_bit.DIR = 0; // Счет верх
  TIM1_CR1_bit.URS = 1; //Прерывание только по переполнению счетчика
  TIM1_EGR_bit.UG = 1;  //Вызываем Update Event для загрузки предделителя

  TIM1_IER_bit.UIE = 1; //Разрешаем прерывание
  TIM1_CR1_bit.CEN = 1; //Запускаем таймер

  asm("rim");

  while(1);
}

Она работает корректно.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Ср окт 04, 2023 08:19:00 
Грызет канифоль
Аватар пользователя

Карма: 1
Рейтинг сообщений: 26
Зарегистрирован: Ср мар 09, 2016 08:07:41
Сообщений: 295
Рейтинг сообщения: 0
флаг прерывания и счетчик нужно сбрасывать в том числе ДО запуска таймера. у таймера есть режим работы с теневымы регистрами, а есть без. насколько вы себе это хорошо представляете?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Ср окт 04, 2023 08:31:06 
Грызет канифоль

Зарегистрирован: Пн фев 10, 2014 19:40:03
Сообщений: 256
Рейтинг сообщения: 0
Пока очень плохо все это представляю. Пытаюсь разобраться на примерах. Собственно, поэтому такие программки пишу.

Получается код нерабочей программы будет выглядеть так?

Код:
#include "IOSTM8S103F3.h"
int x=0,k=1;
char i=1,j=0;


int interrupt_init(void);

#pragma vector=TIM1_OVR_UIF_vector
 __interrupt void Pin6_interrupt(void)
{
 k++;
  if (k == 9)
 {
   k = 1;
 }
 x++;
   if (x == 10000)
 {
   x = 0;
 }
  TIM1_SR1_bit.UIF = 0; //Cброс флага прерывания
}

int main (void)
{
   
   PB_DDR_bit.DDR5 = 1; // Настройка 5-го бита порта B на вывод.
   PB_ODR_bit.ODR5 = 1; // Гашение светодиода.
   PB_CR1_bit.C15 = 1; // Переключение порта в режим push-pull.
   PB_CR2_bit.C25 = 0; // Cкорость переключения до 2 МГц
   
   //Частота переполнений = 2000000Гц / 4 / 500 = 1000 Гц(1 мс)
  TIM1_PSCRH = 0x00;//записываем 2 старших байта числа 3(4-1) в hex формате в регистр предделителя
  TIM1_PSCRL = 0x03;//записываем 2 младших байта числа 3(4-1)в hex формате в регистр предделителя
  TIM1_ARRH = 0x01; //записываем 2 старших байта числа 500 в hex формате в регистр автоперезагруски
  TIM1_ARRL = 0xF4; //записываем 2 младших байта числа 500 в hex формате в регистр автоперезагруски

  TIM1_CR1_bit.DIR = 0; // Cчет вверх
  TIM1_CR1_bit.URS = 1; //Прерывание только по переполнению счетчика
  TIM1_EGR_bit.UG = 1;  //Вызываем Update Event для загрузки предделителя

///////////////////////////////////////////////////////////////////
  TIM1_SR1_bit.UIF = 0; // Выделил добавленную строку
//////////////////////////////////////////////////////////////////
 
 TIM1_IER_bit.UIE = 1; //Разрешаем прерывание
  TIM1_CR1_bit.CEN = 1; //Запускаем таймер

  asm("rim");
  while(1)
  {
    if (x < 1000)
 {
   PB_ODR_bit.ODR5 = 0;
 }
 
...............Пропустил часть кода..................

 if ((x >= 9000) && (x < 10000))
 {
   PB_ODR_bit.ODR5 = 1;
 }
 }
  }


А может дело в настройках Workspace? Программы-то почти одинаковые...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Ср окт 04, 2023 08:56:33 
Грызет канифоль
Аватар пользователя

Карма: 1
Рейтинг сообщений: 26
Зарегистрирован: Ср мар 09, 2016 08:07:41
Сообщений: 295
Рейтинг сообщения: 0
>>TIM1_EGR_bit.UG = 1; //Вызываем Update Event для загрузки предделителя
уберите.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Ср окт 04, 2023 14:10:03 
Собутыльник Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 433
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2544
Рейтинг сообщения: 3
Код:
volatile int x=0,k=1;


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Ср окт 04, 2023 19:46:41 
Грызет канифоль

Зарегистрирован: Пн фев 10, 2014 19:40:03
Сообщений: 256
Рейтинг сообщения: 0
VladislavS
Большое спасибо за подсказку. Все заработало.
Почитал про этот квалификатор. Появились вопросы :)
Правильно ли я понял, что его обязательно нужно применять при программировании любых МК, если переменная используется(читай меняет свое значение) в функциях и прерываниях?


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 2579 ]     ... , , , 119, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y