Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 1
Регистрация: 25.12.2019
Сообщений: 5
1

STM8 Захват по входу

16.12.2020, 11:26. Просмотров 1091. Ответов 1
Метки stm8 (Все метки)

Есть у меня МК stm8s103f3p6, использую для написания IAR workbench 3.11.1 и китайский свисток ST-Link V2. Возникла следующая проблема: мне нужно осуществить захват сигнала по входу по спадающему фронту, то есть, когда на ноге C3 перирдически то появляется, то пропадает сигнал с определённой частотой, то должно, по идее, вызываться прерывание захвата/сравнения, где я могу посмотреть, что там натикал таймер TIM1 и что-то с этим значением сделать. Собстенно этого то и не просходит, и программа не заходит в прерывание. Ногу МК вручную замыкаю на землю проводом.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <iostm8s103f3.h>
#include <stdint.h>
 
void CLK_HSI_16MHZ_init(){
  CLK_CKDIVR_bit.HSIDIV = ((uint8_t)0x00); // устанавливаем делитель частоты = 1
}
 
void INTERRUPT_ON(){
  asm("RIM");
}
 
#pragma vector = TIM1_CAPCOM_CC3IF_vector
__interrupt void TIM1_CAP_CH3(void){
  TIM1_SR1_bit.CC3IF = 0; // тут пока ничего не делаем и сбрасываем флаг прерывания (тут стоит брейкпоинт отладчика)
}
 
void TIM1_init(void){
  TIM1_CR1_bit.CEN = 0; // для перестраховки явным образом отключаем TIM1
 
  PC_DDR_bit.DDR3 = 0;
  PC_CR1_bit.C13 = 1;
  PC_CR2_bit.C23 = 0;   // настраиваем PC3 как вход с подтяжкой к питанию (как это рекомендуют в мануале)
  
  TIM1_CCER2_bit.CC3E = 0;   // для перестраховки явным образом отключаем 3-й канал захвата/сравнения
  TIM1_CCMR3_bit.CC3S = 1;   // настраиваем путь сигнала 3-го канала по пути TI3FP3
  TIM1_CCMR3_bit.OC3M = 0x0; // устанавливаем количество семплов равным нулю
  TIM1_CCER2_bit.CC3P = 1;   // сравнение по спадающему фронту
  TIM1_IER_bit.CC3IE = 1;    // включем прерывания на 3-ем канале
  
  TIM1_CCER2_bit.CC3E = 1;   // включаем 3-й канал
  TIM1_CR1_bit.CEN = 1;      // включаем TIM1
}
 
int main( void )
{
  CLK_HSI_16MHZ_init();
  INTERRUPT_ON();
  TIM1_init();  
  while(1){
  }
  return 0;
}
STM8 Захват по входу

Вход третьего канала TIM1 помечен как альтернативная функция PC3 по умолчанию, так что необходимость ремапа option bits я сразу отмёл.

STM8 Захват по входу

Для включения альтернативной функции пина, как я понял, нужно просто включить сам 3-й канал TIM1, так как в мануале написано, что это включается соответствующим регистром переферии. Так что и тут всё верно.

STM8 Захват по входу

Можно предположить, что надо сконфигурировать сам пин с подтяжкой и прерыванием, но, как видно из схемы выше, вход альтернативной функции канала подключён параллельно со входом прерывания самого пина, так что в этом нет необходимости.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.12.2020, 11:26
Ответы с готовыми решениями:

кто сделает экспорт SDCC STM8 -> IAR STM8 ?
а то труды пропадут... https://github.com/eddyem/STM8_samples

3.3в выход к 5в входу
день добрый, продолжаю подключать арм к th3122 ;) собственно читать из шины уже научился, а вот...

Фильтр по входу блока питания
Здравствуйте! Никогда не делал такого, нужно ткнуть для начала. А то гугль всякую ерунду на мои...

Подключение к телевизору по компонентному входу
Добрый день, уважаемые. Собственно нужна помощь: хочу подключить старый телик Cameron 21SL40 к...

1
0 / 0 / 1
Регистрация: 25.12.2019
Сообщений: 5
16.12.2020, 16:16  [ТС] 2
Лучший ответ Сообщение было отмечено ValeryS как решение

Решение

Решил я свою проблему. Внимательность - наше всё. В ходе работы мне понадобилось использовать эмулятор МК, после чего я благополучно забыл переставить режим отладки с симулятора МК на стлинк, с чем и было связано отсутствие входа в прерывание ввиду того, что у симулированного МК на ногах не было сигнала.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.12.2020, 16:16

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Подключение инклинометра к аналоговому входу
Всем здравствуйте! только учусь, столкнулся с вопросом подключения датчика инклинометра...

Как присвоить имя входу Atmega8 в C++
Добрый день. Есть программа на С, в которой часто опрашиваются входы и идет управление выходами...

Сма ARDO AE 810, МС7805С (по входу КЗ)
Доброго вечера всем . Проблема такова , пробивает МС7805С (по входу КЗ) ,затем проц по питанию и...

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

Помогите подключиться к микрофонному входу рации.
Задача - подать звуковой сигнал через PMR рацию. рация Сobra MT800 В хендсфри от этой рации стоит...

Подключение DVI монитора по VGA входу
Собственно вот проблема. Собрал новый блок, на Видеокарте два входа один DVI, другой VGA. И у меня...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.