Вот здесь:
http://forum.easyelectronics.ru/viewtop ... 33&t=20021
http://www2.st.com/content/st_com/en/pr ... 003f3.htmlCasper17 писал(а): а у STM ничего подобного найти не могу. Все разбросано. Подскажите, дайте пожалуйста ссылки)) И еще такой вопрос, как лучше, проще работать с STM на прямую с регистрами или использовать библиотеки SPL?
Код: Выделить всё
// PC4
PC_DDR_bit.DDR4 = 1;
PC_CR1 |= MASK_PC_CR1_C14;
// TIM1
TIM1_CR1 = MASK_TIM1_CR1_ARPE;
TIM1_CR1_bit.CMS = 0; // 00 - edge aligned, 01 - center aligned1
TIM1_CR2 = 0;
TIM1_IER = 0;
//TIM1_EGR = 0;
TIM1_CCMR1 = 0;
TIM1_CCMR2 = MASK_TIM1_CCMR2_OC2PE | MASK_TIM1_CCMR2_OC2FE;
TIM1_CCMR2_bit.OC2M = 6; // 0b110 - PWM mode 1, 0b111 - PWM mode 2
TIM1_CCMR3 = 0;
TIM1_CNTRH = 0;
TIM1_CNTRL = 0;
TIM1_CCER1 = MASK_TIM1_CCER1_CC2NE;
TIM1_CCER2 = 0;
TIM1_PSCRH = 0;
TIM1_PSCRL = 0;
TIM1_ARRH = 4; // pwm frequency
TIM1_ARRL = 0;
TIM1_CCR2H = 1; // pwm duty
TIM1_CCR2L = 0;
TIM1_BKR = MASK_TIM1_BKR_MOE | MASK_TIM1_BKR_OSSR;
TIM1_CR1 |= MASK_TIM1_CR1_CEN;
TIM1_EGR |= MASK_TIM1_EGR_UG;In the open-drain output column, "T" defines a true open-drain I/O (P-buffer, weak pull-up, and protection diode to VDD are
not implemented).
То есть при работе контроллера от LSI 38 кГц I2C корректно завести вообще нельзя?The peripheral input clock frequency must be at least: 1 MHz in Standard mode, 4 MHz in Fast mode
Просто по документации не совсем было понятно, что в том контексте означает это «must». Означало ли это, что при меньшей частоте sysclock просто шину нельзя будет разогнать до 100 и 400 кГц, или же что (вдруг) имеется некая нигде не описанная аппаратная защита, которая при недостаточной частоте весь контроллер сбрасывает/вырубает (multimaster ведь…).a5021 писал(а):Standard mode имеет частоту I2C равную 100кГц, а fast -- 400кГц. Умножать тактовую STM8 не умеют, т.ч. способа из 38кГц тактовой получить 100кГц I2C просто не существует в природе.
Код: Выделить всё
I2C_CR2_SWRST=1;
I2C_CR2_SWRST=0;Код: Выделить всё
I2C_FREQR_FREQ = 16;
I2C_CR1_PE = 0;
I2C_CCRH_F_S = 0;
ccr = 80;
I2C_TRISER_TRISE = 16+1;
I2C_CCRL = ccr & 0xFF;
I2C_CCRH_CCR = (ccr >> 8) & 0x0F;
I2C_CR1_PE = 1;
I2C_CR2_ACK = 1;