Вс дек 11, 2016 20:47:56
Вс дек 11, 2016 21:14:12
Вс дек 11, 2016 21:24:42
Вс дек 11, 2016 21:35:57
Вс дек 11, 2016 22:55:48
Chettuser писал(а):Ткните носом в документ с описанием регистров STM8?
Пн дек 12, 2016 08:44:47
ptr128 писал(а):Есть еще кто, столь же уверенный, что это не бага в SPL?
#include <stdio.h>
#include <iostream>
#include <conio.h>
uint8_t tim2sr2;
/** TIM2 Flags */
typedef enum
{
TIM2_FLAG_UPDATE = ((uint16_t)0x0001),
TIM2_FLAG_CC1 = ((uint16_t)0x0002),
TIM2_FLAG_CC2 = ((uint16_t)0x0004),
TIM2_FLAG_CC3 = ((uint16_t)0x0008),
TIM2_FLAG_CC1OF = ((uint16_t)0x0200),
TIM2_FLAG_CC2OF = ((uint16_t)0x0400),
TIM2_FLAG_CC3OF = ((uint16_t)0x0800)
} TIM2_FLAG_TypeDef;
void TIM2_ClearFlag(TIM2_FLAG_TypeDef TIM2_FLAG)
{
tim2sr2 = (uint8_t)(~((uint8_t)((uint8_t)TIM2_FLAG >> 8)));
printf("TIM2->SR2 = 0x%X \n", tim2sr2);
tim2sr2 = (uint8_t)(~((uint8_t)(TIM2_FLAG >> 8)));
printf("TIM2->SR2 = 0x%X", tim2sr2);
}
int main(void)
{
TIM2_ClearFlag(TIM2_FLAG_CC2OF);
getch();
return 0;
}
Пн дек 12, 2016 22:16:26
Пн дек 12, 2016 23:17:44
Пн дек 12, 2016 23:47:36
Вс янв 08, 2017 13:34:55
scorpi_0n писал(а):Тем более что у иаровцев еще есть над чем работать в плане оптимизации.
Ср янв 11, 2017 13:27:44
Ср фев 01, 2017 12:39:03
Ср фев 01, 2017 23:33:39
Сб фев 04, 2017 14:59:20
Она работает так же, как и любая другая кнопка. Меняет логический уровень на пине - высокий (лог.1) или низкий (лог.0). Нужно просто считать уровень на пине микроконтроллера.aerokostia писал(а):И тут я застрял. Она сенсорная и никак не могу понять, как она общается с МК.
Чт фев 16, 2017 11:25:38
//Настройка таймера 1
//настройка порта
PC_DDR=MASK_PC_DDR_DDR4; //Pc4 выход
PC_CR1=MASK_PC_CR1_C14; //пушпул
PC_CR2=MASK_PC_CR2_C24; //10MHz
//PC_ODR^=MASK_PC_ODR_ODR4;
CLK_PCKENR1|=1<<7; //включение тактирования таймера 1
//TIM1_PSCRL=(160-1)&0x00FF; //предделитель так что таймер досчитает до 1000 за 10мс
//TIM1_PSCRH=(160-1)>>8;
//TIM1_ARRL=(255)&0x00FF; //считать будем максимум до тысячи
//TIM1_ARRH=(255)>>8;
//TIM1_CCR4L=(128)&0x00FF; //Регистр сравнения
//TIM1_CCR4H=(128)>>8;
TIM1_CCER2=MASK_TIM1_CCER2_CC4E | MASK_TIM1_CCER2_CC4P;// CH4 таймера 1 как выход и полярность
TIM1_CCMR4=( 0x6<<4) | MASK_TIM1_CCMR4_OC4PE;//PWM моде и буферное обновление регистра сравнения.
//TIM1_CR1=//MASK_TIM1_CR1_ARPE;// | MASK_TIM1_CR1_DIR;// | MASK_TIM1_CR1_OPM; //буферное обновление максимума счета и однократный счет
TIM1_CR2=1;//Bit 0CCPC: Capture/compare preloaded control
//TIM1_BKR =0x80; // OC and OCN outputs are enabled if their respective enable bits are set (CC/E in Tim1_CCERi)
//TIM1_RCR=0xFF;
TIM1_IER=1;
TIM1_CR1|=MASK_TIM1_CR1_CEN; //запускаем таймер
Чт фев 16, 2017 12:38:20
//TIM1_ARRL=(255)&0x00FF; //считать будем максимум до тысячи
//TIM1_ARRH=(255)>>8;
....
void TIM1_init(void) // Настройка таймера 1
{
//PWM output signal frequency = TIM1 counter clock/(TIM1_ARR + 1)
//Channel x duty cycle = [TIM1_CCRxx/(TIM1_ARR + 1)] * 100
TIM1->PSCRH = 0x00;
TIM1->PSCRL = 0x00;
TIM1->ARRH = 0x0F;
TIM1->ARRL = 0x9F;
TIM1->CCMR1 |= (uint8_t)0x60; //110: PWM mode 1 - In up-counting, channel 1 is active as long as TIM1_CNT < TIM1_CCR1,
TIM1->CCER1 |= TIM1_CCER1_CC1E; //CH1 compare Enable
TIM1->CCR1H = 0x07;
TIM1->CCR1L = 0xD0;
TIM1->CR1 |= TIM1_CR1_CEN;
TIM1->BKR |= TIM1_BKR_MOE; // OC and OCN outputs are enabled if their respective enable bits are set (CC/E in Tim1_CCERi)
}
Чт фев 16, 2017 14:35:00
Да там раньше другие числа стояли, значительно больше 255, расчетные. Это сейчас всякие пробыне варианты, не думал что застряну в лыжах на асфальте на таком вопросе.oleg110592 писал(а):Регистры вроде 8-мибитные?
Чт фев 16, 2017 14:46:30
Чт фев 16, 2017 15:43:26
...
/* Set the Prescaler value */
TIM2->PSCR = (uint8_t)(0);
/* Set the Autoreload value */
TIM2->ARRH = (uint8_t)(0);
TIM2->ARRL = (uint8_t)(0xFF);
/* Reset the Output Compare Bits & Set the Ouput Compare Mode */
TIM2->CCMR1 = (uint8_t)((uint8_t)(TIM2->CCMR1 & (uint8_t)(~TIM2_CCMR_OCM)) |
(uint8_t)TIM2_OCMODE_PWM1);
...
Пт фев 17, 2017 20:53:05