Страница 121 из 130
Re: Программирование STM8
Добавлено: Вт авг 29, 2023 22:25:01
Pjatruha@mail.ru
[uquote="Martian",url="/forum/viewtopic.php?p=4470112#p4470112"]только теперь i меняется в глобальном цикле, не препятствуя выполнению основной программы.[/uquote]
Ах вот как это делается... А я всю голову себе сломал... Все оказывается лежит на поверхности.
[uquote="Martian",url="/forum/viewtopic.php?p=4470112#p4470112"]И ещё: кнопка может генерировать три события: KeyUp, KeyDown и Click.[/uquote]
Навереное KeyUp/KeyDown будет выглядеть вот так, с учетом ваших рекомендаций:
Код: Выделить всё
int main (void)
{
i = 0;
....
while(PD_IDR_bit.IDR3!=1) // KeyUp - 0, KeyDown - 1
{
if (i > 0)
{
i--;
}
if (i == 0)
{
i = 20000;
n++;
}
.....
}// while
}
А Click будет выглядеть вот так:
Код: Выделить всё
int main (void)
{
i = 0;
....
while(1)
{
if (i > 0)
{
i--;
}
if (PD_IDR_bit.IDR3!=1)
{
if (i == 0)
{
if (PD_IDR_bit.IDR3!=0)
{
i = 20000;
n++;
}
}
}
.....
}// while
}
Re: Программирование STM8
Добавлено: Ср авг 30, 2023 17:53:40
Pjatruha@mail.ru
[uquote="Martian",url="/forum/viewtopic.php?p=4470141#p4470141"]поэтому надо немного больше заморочиться.[/uquote]
Тогда Click будет выглядеть так:
Код: Выделить всё
int main (void)
{
i = 0;
j = 0;
....
while(1)
{
if (i > 0)
{
i--;
}
if (PD_IDR_bit.IDR3!=1 & i == 0)
{
if (j == 0 )
{
j = 1;
}
}
if (PD_IDR_bit.IDR3!=0 & j == 1)
{
if (i == 0)
{
i = 20000;
j = 0;
n++;
}
}
.....
}// while
}
Дополнение
Нет, не будет это работать. Надо еще подумать...
Все, придумал. Проверил. Четкие переключения без ложных срабатываний. Теперь мне нравится работа кнопки.
Код: Выделить всё
int n = 2, i=0, j=0;
while(1)
{
if (i > 0)
{
i--;
}
if (PD_IDR_bit.IDR3!=1 & i == 0)
{
if (j == 0 )
{
j = 1;
i = 2000;
}
}
if (PD_IDR_bit.IDR3!=0 & j == 1)
{
if (i == 0)
{
i = 2000;
j = 0;
n++;
}
}
}
Re: Программирование STM8
Добавлено: Чт авг 31, 2023 19:19:14
Pjatruha@mail.ru
Суть вашей идеи я уловил, как мне кажется, но отдельные моменты мне остались не понятны.
[uquote="Martian",url="/forum/viewtopic.php?p=4470548#p4470548"]// а здесь пишем обработку кнопок[/uquote]
Поясните этот момент. Не понял, что за обработка.
А тут вы хотели сделать инверсию?
[uquote="Martian",url="/forum/viewtopic.php?p=4470548#p4470548"]button_status ^= button_status;[/uquote]
Если да, то 0^0=1, но и 1^1=1. Может вот так: button_status = !button_status ? Или так нельзя?
Re: Программирование STM8
Добавлено: Чт авг 31, 2023 20:00:36
Pjatruha@mail.ru
Тогда что вы имели ввиду тут?
[uquote="Martian",url="/forum/viewtopic.php?p=4470548#p4470548"]// здесь можно вызвать функцию обработки события кнопки или написать код[/uquote]
Честно говоря, в этих двух строчках я и запутался.

Re: Программирование STM8
Добавлено: Чт авг 31, 2023 21:03:42
Pjatruha@mail.ru
[uquote="Martian",url="/forum/viewtopic.php?p=4470993#p4470993"]если антидребезг и опрос портов отлажены, то там уже ничего не трогается, работаем только с KeyChange[/uquote]
Сразу видно, что не один десяток программ написали

Мыслите глобально с заделом на будущее. Я пока так не умею, но буду к этому стремиться.
Re: Программирование STM8
Добавлено: Чт авг 31, 2023 23:18:07
valentinovich
Pjatruha@mail.ru писал(а):Я пока так не умею, но буду к этому стремиться.
Ничего, ничего, как говорят "лиха беда начало".
Стремиться к чему-то - это хорошо и нужно.
Но главное всё же во всём этом уловить, что основное есть
выбор правильного алгоритма для решения задуманного вами процесса!
И только второе - это его та или иная (но желательно всё же оптимальная

) реализация на выбранном вами языке.
Удачи в освоении программирования.

Re: Программирование STM8
Добавлено: Пт сен 01, 2023 17:27:52
Pjatruha@mail.ru
[uquote="valentinovich",url="/forum/viewtopic.php?p=4471080#p4471080"]Но главное всё же во всём этом уловить, что основное есть
выбор правильного алгоритма для решения задуманного вами процесса![/uquote]
Да, полностью с вами согласен. Это я еще со школьной скамьи знаю.

(давно это было...) Мы тогда паскаль изучали. Сам язык и не помню, но алгоритмы составлять нас научили(я так думаю

).
Добавлено after 9 hours 30 minutes 46 seconds:
Подскажите, пожалуйста, а как мне посчитать частоту моргания светодиода в этой программе:
Код: Выделить всё
#include "IOSTM8S103F3.h"
int main( void )
{
int k=0;
PB_DDR_bit.DDR5 = 1; //
PB_CR1_bit.C15 = 1; //
PB_CR2_bit.C25 = 1; //
while(1)
{
if ( k > 0)
{
k++;
}
if (k == 0)
{
PB_ODR_bit.ODR5 = 0;
k++;
}
if (k == 200)
{
PB_ODR_bit.ODR5 = 1;
}
if (k == 400)
{
k=0;
}
}
}
Частота работы процессора по умолчанию 2МГц. Нужно 2000кГц/400? Что-то у меня другую частоту осциллограф показывает...
Re: Программирование STM8
Добавлено: Пт сен 01, 2023 21:51:47
Pjatruha@mail.ru
[uquote="Martian",url="/forum/viewtopic.php?p=4471482#p4471482"]теперь смотрим листинг ассемблера, как компилятор скомпилировал:[/uquote]
Большое спасибо за пояснение.
[uquote="Martian",url="/forum/viewtopic.php?p=4471482#p4471482"]Наверное, пришло время изучить таймеры

[/uquote]
Опять вы зрите в корень.
Уже начал изучать. А параллельно и прерывания. Пару дней уже не могу понять вот это
Код: Выделить всё
Обработчики прерываний определяются следующим образом:
#pragma vector=<номер прерывания> (табл. 3.1)
__interrupt void <имя прерывания>,
<номер прерывания> – номер прерывания в hex формате. Берется
значение из технической документации микроконтроллера и к нему
прибавляется 2.
<имя прерывания> – имя, которое будет именем подпрограммы
обработчика прерывания (определяется пользователем).
__interrupt void Это функция, которая будет исполнятся при наступлении условия прерывания(вектора прерывания)?
Как указать значение вектора прерывания? Точнее сказать, какое значение должно стоять, например, для TIM1 захват/сравнение? Не могу разобраться как значение из таблицы перевести в шестнадцатеричный формат.
Re: Программирование STM8
Добавлено: Сб сен 02, 2023 09:34:26
Pjatruha@mail.ru
Большое спасибо за статью. Мне очень понравилось. Написано простыми словами. Очень легко читать. Пожалуй прочитаю весь цикл статей этого автора по теме STM8. Но тут ответ на мой вопрос все же не полный. По сути можно не заморачиваться и пользоваться готовой таблицей из заголовочного файла IOSTM8S103F3.h(ведь не зря же он подключен

) , но мне все же хотелось бы разобраться до конца. Как получилась эта таблица в заголовочном файле?
Вот таблица из DataSheet

Нужно брать номер вектора прерывания из первого столбца таблицы, прибавлять к нему 2, а затем переводить в шестнадцатеричный формат? Т.е. для TIM2 capture/compare это значение будет 14+2=16(dec)=10(hex),верно?
Re: Программирование STM8
Добавлено: Сб сен 02, 2023 14:46:38
GARMIN
Всё верно, можно даже не переводить в 16-ти ричный формат.
Re: Программирование STM8
Добавлено: Вс сен 03, 2023 07:21:47
Bill_
[uquote="Pjatruha@mail.ru",url="/forum/viewtopic.php?p=4471763#p4471763"]Большое спасибо за статью. Мне очень понравилось. Написано простыми словами. Очень легко читать. Пожалуй прочитаю весь цикл статей этого автора по теме STM8. Но тут ответ на мой вопрос все же не полный. По сути можно не заморачиваться и пользоваться готовой таблицей из заголовочного файла IOSTM8S103F3.h(ведь не зря же он подключен

) , но мне все же хотелось бы разобраться до конца. Как получилась эта таблица в заголовочном файле?
Вот таблица из DataSheet

Нужно брать номер вектора прерывания из первого столбца таблицы, прибавлять к нему 2, а затем переводить в шестнадцатеричный формат? Т.е. для TIM2 capture/compare это значение будет 14+2=16(dec)=10(hex),верно?[/uquote]
Все вектора описаны в системном заголовочном файле
Код: Выделить всё
#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:34:33
Pjatruha@mail.ru
[uquote="Bill_",url="/forum/viewtopic.php?p=4472139#p4472139"]Все вектора описаны в системном заголовочном файле[/uquote]
Большое спасибо за ответ. С этим я уже разобрался.
Бегло пробежался по заголовочному файлу. Там много чего непонятного написано

. Хотелось бы во всем этом разобраться. Может есть какая литература на эту тему?
Сейчас параллельно читаю
-
Основы микропроцессорной техники: микроконтроллеры
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
Bill_
[uquote="Martian",url="/forum/viewtopic.php?p=4472230#p4472230"]
Bill_, все вектора описаны в даташите. "Системный заголовочный файл" не является ни обязательным, ни стандартом. Он идёт со средой разработки, библиотеками и т.д., может быть различным (вот приведённого Вами у меня нет и никогда не было), может не генерироваться при создании проекта, а кто-то может вообще пишет в блокноте и скармливает компилятору в командной строке.[/uquote]
Хм... Я сам никогда этим не пользовался. Я сделал свою таблицу векторов на ассемблере и включаю этот файл в свои проекты.
Добавлено after 4 minutes 26 seconds:
[uquote="Pjatruha@mail.ru",url="/forum/viewtopic.php?p=4472236#p4472236"][uquote="Bill_",url="/forum/viewtopic.php?p=4472139#p4472139"]Все вектора описаны в системном заголовочном файле[/uquote]
Большое спасибо за ответ. С этим я уже разобрался.
Бегло пробежался по заголовочному файлу. Там много чего непонятного написано

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

Поэтому, думаю, чем большей информацией я буду владеть, тем меньше вопросов у меня будет возникать в процессе изучения. Точнее сказать, тем больше вероятность, что я найду ответы на свои вопросы в имеющемся у меня материале.[/uquote]
Не стесняйтесь, задавайте свои "глупые" вопросы.
Re: Программирование STM8
Добавлено: Вт окт 03, 2023 21:56:57
Pjatruha@mail.ru
Здравствуйте.
Пишу программу для 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
Selfrock
Видимо если объявить переменную внутри функции, обрабатывающей прерывание, то и видна она будет только внутри этой самой функции... это называется область видимости переменных...
Если Вам нужна переменная, видимая отовсюду, объявляйте ее в глобальной области видимости, т.е. до начала функции main
Re: Программирование STM8
Добавлено: Ср окт 04, 2023 00:09:46
Pjatruha@mail.ru
Все переменные у меня объявлены в самом начале
Код: Выделить всё
#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:25:27
Pjatruha@mail.ru
Вот код программы
Код: Выделить всё
#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 01:40:37
Pjatruha@mail.ru
А как поставить этот бит?
Если написать так
CLK_PCKENR1_bit.PCKEN17 = 1;
То компилятор выдает ошибку
Error[Pe020]: identifier "CLK_PCKENR1_bit" is undefined
Если записать единицу в весь регистр
CLK_PCKENR1 = 1; то компиляция проходит без ошибок. Но результата это не приносит. При этом в прерывания программа вообще перестает заходить.

Re: Программирование STM8
Добавлено: Ср окт 04, 2023 08:06:00
Pjatruha@mail.ru
Я подумал, что неправильно понял даташит. Если люди(гораздо опытнее меня) что-то советуют, значит это нужно делать беспрекословно.
У меня есть еще вот такая программа
Код: Выделить всё
#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
JackSmith
флаг прерывания и счетчик нужно сбрасывать в том числе ДО запуска таймера. у таймера есть режим работы с теневымы регистрами, а есть без. насколько вы себе это хорошо представляете?