Поиск сообщества
Показаны результаты для тегов 'stm8S'.
Найдено: 6 результатов
-
Возникла проблема, не знаем как прошить STM8S003F3P6. Уже как только не пытались, кучи различных программ ставили, различными способами пытались подкопаться, всё равно выдаёт либо что не видит, либо просто некую ошибку. По поводу этих ошибок тоже сколько не копались, всё равно ничего. ST-Link рабочий, подключение хорошее. Нужно залить код для управления маленьким движком, чтобы выдавало либо +5В, либо -5В. Такое ощущение, что этот контроллер уже просто не поддерживается многими программами. Может кто-нибудь из вас знает что можно сделать, или как правильно прошить этот аппарат? Потому что уже кучу роликов на ютубе пересмотрели, форумов перечитали, никак не выходит. Получилось только сделать, чтобы программа увидела STM-ку. Благодарю за помощь)
- 4 ответа
-
- STM8S
- микроконтроллер
-
(и ещё 1 )
C тегом:
-
STM8s TIM2 [ARR] [PSCR] реальное не совпадает с расчётным
9Klima опубликовал тема в МК для начинающих
Здравствуйте обитатели форума, вернулся к кодингу и на форум после лет 12 паузы. взялся за STM8 перед тем как штурмовть стм32 там уже получил по лбу когда-то и откотился. суть вопроса сконфигурировал второй таймер. второй канал на кристале STM8S103F3 как ШИМ1 всё класно работает гордость за не напрасно потраченное время на дробления RM0016. наступил момент написания библиотеки для удобности обращения с шимом и тут началась эпопея: Сначала как посчитать что загрузить чтобы получить желаемую частоту, потом проверка всё на осциллограммах и тут на меня приходит озарение что наверное что то не так, временные интервалы до частоты 122Hz рросчитываются и совпадают. А после просто треш : тактовая частота HSI 16 000 000 без делителей прямо на вход таймера. PSCR =0; ARR=65535; Fout=244Hz PSCR =1; ARR=65535; Fout=121Hz PSCR =2; ARR=65535; Fout=60Hz PSCR =3; ARR=65535; Fout=30Hz PSCR =4; ARR=65535; Fout=15Hz PSCR =5; ARR=65535; Fout=7,59Hz PSCR =6; ARR=65535; Fout=3,8Hz PSCR =7; ARR=65535; Fout=1,91Hz PSCR =8; ARR=65535; Fout=0,98Hz Вроде всё гармонично но по факту както у меня не сошлось с расчётами. Там где должно быть 80 там 60. Я понимаю что встроенный генератор не блещет стабтильностью но всё равно что-то с расчётами не так либо я вообще не знаю что делаю не так. Fout= Fтактирования/([PSCR]+1)/([ARR]+1) тз сих выходит: PSCR =8; ARR=65535; Fout=???Hz 16 000 0000/9/65536/=27Hz Что не так? где лыжи не едут? чувствую нужно срочно заказать частотомер для измерения до чёрто знаков дабы невроз не лечить. -
По приходящему на ножку A1 импульсу настроено прерывание. Прерывание должно отработать один раз и должно делать следующее: пауза 7 секунд, потом на 1,5 секунды открыть реле. Во время прерывания светодиод на плате гаснет и загорается в такт секундам. Код отрабатывает верно за исключением того, что прерывание отрабатывает 2 раза. Т.е. подали импульс, заморгал светодиод в течении 7ми секунд, потом щёлкнуло реле (открылось), затем опять щёлкнуло (закрылось), потом всё повторяется еще раз (7+1,5). В режиме дебага работает нормально. Пробовал отключать реагирование на прерывания во время его отработки: disableInterruupts(); ... enableInterruupts(); но не помогает. STM8S103F3P6 Код прерывания Код в main.c
-
Здравствуйте уважаемые форумчане. Пытаюсь связать два микроконтроллера по шине LIN. В качестве мастера выбрал контроллер STM8S103F3P6 (Его Usart умеет только LIN MASTER). В качестве ведомого выбрал STM8S208RBT6 (У него 2 Усарта, один из которых умеет быть ведомым LIN) Собрал на двух макетных платах. LIN трансивер TJA1020 Прием и передача работают нормально. Но как дошло дело до защиты от потери линии связи, тут возникли проблемы. После обрыва линии связи и ее восстановления связь возобновляется. Но вот после короткого замыкания шины LIN ведомое (SLAVE) устройство намертво виснет. Точнее виснет в обработчике прерывания от USART3. Я пытался принудительно очистить флаг приема по узарту (UART3_FLAG_RXNE) и флаг приема хедер байта (UART3_FLAG_LHDF). А также скидывал флаг брэйк байта (UART3_FLAG_LBDF). Ничего не помогает программа не возвращается из прерывания по приему от USART_3. Но зато если в этот момент с ведущего устройства снова подать команду, то работоспособность ведомого устройства восстанавливается. Тоже самое помогает, если в обработчике прерывания по USART_3 принудительно подать рандомную команду на передачу. То есть, так как линия одна, она сама свою же команду и принимает, получается. Вроде все нормально, но как то коробит такой колхозный способ защиты от короткого замыкания шины. Подскажите, может я забываю еще какой нибудь скинуть флаг при случае коротыша на линии LIN или есть еще каrой нибудь правильный способ обойти защиту от потери связи после кратковременного замыкания на шине. Надеюсь тут есть люди, которые что-то делали с шиной LIN ? Прилагаю инициализацию для мастер устройства UART1_Init( 9600, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE); UART1_LINBreakDetectionConfig( UART1_LINBREAKDETECTIONLENGTH_11BITS); UART1_ITConfig( UART1_IT_RXNE_OR, ENABLE); UART1_LINCmd( ENABLE); enableInterrupts(); И для Ведомого устройства UART3_Init( 9600, UART3_WORDLENGTH_8D, UART3_STOPBITS_1, UART3_PARITY_NO, UART3_MODE_TXRX_ENABLE); UART3_LINConfig( UART3_LIN_MODE_SLAVE, UART3_LIN_AUTOSYNC_ENABLE,UART3_LIN_DIVUP_LBRR1); UART3_LINBreakDetectionConfig( UART3_LINBREAKDETECTIONLENGTH_11BITS); UART3_ITConfig( UART3_IT_RXNE_OR, ENABLE); UART3_ITConfig( UART3_IT_LBDF, ENABLE); UART3_ITConfig( UART3_IT_LHDF, ENABLE); UART3_LINCmd( ENABLE); enableInterrupts(); А также обработчик прерывания для ведомого устройства //Обработчик прерывания для UART3. INTERRUPT_HANDLER( UART3_RX_IRQHandler, 21) { if( UART3_GetFlagStatus( UART3_FLAG_LHDF)){recUART3_Header=UART3_ReceiveData8(); UART3_ClearFlag(UART3_FLAG_LHDF);} if( UART3_GetFlagStatus( UART3_FLAG_RXNE)){recUART3_Data=UART3_ReceiveData8(); UART3_ClearFlag(UART3_FLAG_RXNE);} if( UART3_GetFlagStatus( UART3_FLAG_LBDF)){ UART3_ClearFlag( UART3_FLAG_LBDF);} if( UART3_GetFlagStatus(UART3_FLAG_OR_LHE)){UART3_SendData8(0x00);UART3_ClearFlag(UART3_FLAG_OR_LHE);}// Отправляю пустую команду через USART_3 }
-
Объясните пожалуйста следующие, на руках имеется STM8S103F3P6, сначала была проблема запустить SPI, проблема была даже не в запуске а корректной работе - сделал! А вот с таймером я засел вообще. Хочу сделать программный delay по средствам таймера TIM1 без прерываний. Ниже скидываю инициализацию таймера TIM1 и обработчник(функция delay) Тактовая частота 2MHz. Где загвоздка? #include "iostm8s103f3.h" void TIM1_init(void); void delay_us(unsigned int d); void TIM1_init(void) { ////Величина автоперезагрузки//// unsigned int auto_preload = 65535; TIM1_ARRH=((auto_preload&0xFF00)>>8); TIM1_ARRL=auto_preload&0x00FF; //////////////////////////////// ////////Установка делителя////// unsigned int div_load = 2000; TIM1_PSCRH=((div_load&0xFF00)>>8); TIM1_PSCRL=div_load&0x00FF; //////////////////////////////// TIM1_CR1|=(1<<7)|(1<<1)|(1<<0); } void delay_us(unsigned int d) { TIM1_CNTRH=0;TIM1_CNTRL=0; TIM1_ARRH=((d&0xFF00)>>8); TIM1_ARRL=d&0x00FF; while(((unsigned int)((TIM1_CNTRH<<8)+TIM1_CNTRL))<d){}; } int main() { ///////////////////////////////////// //Отключаем Всю периферию // CLK_PCKENR1=0x00; CLK_PCKENR2=0x00; ///////////////////////////////////// CLK_PCKENR1|=(1<<7);//Включаем тактирование для TIM1 TIM1_init(); //Настройка ногодрыга для проверки таймера// PB_DDR|=(1<<5); PB_CR1|=(1<<5); PB_CR2|=(1<<5); //////////////////////////////////////////// while(1) { PB_ODR&=~(1<<5); delay_us(1000);//1сек PB_ODR|=(1<<5); delay_us(1000);//1сек } return 0; }
-
Продам микросхемы. Все новое. 95 % в упаковке. 1. Микроконтроллеры STM32F030F4P6 - 3 шт. TSSOP20. 30 руб. STM8S003F3U6TR - 5 шт. UFQFPN20. 20 руб. STM8S003F3P6 - 3 шт. TSSOP20. 30 руб. AT91SAM7S512 - 3 шт. TQPF64. 120 руб. AT91SAM7S256 - 3 шт. TQPF64. 90 руб. AT91SAM7S64 - 50 шт. TQPF64. Сняты с не работавших плат. 40 руб/шт. PIC12LF1840 - 3 шт. 30 руб. 2. Память AT24C128C-SSHM 6 шт. SO8. 10 руб. AT25DF081A - 3 шт. SO8. 20 руб. AT45DB161 - 25 шт. 50 руб. 3. Питание NCP1013AP100G - 3 pcs NCP1012AP065G - 3 pcs NCP1028P100G - 2 pcs NCP1011AP100G - 3 pcs NCP1053P100G - 3 pcs NCP1011APL065R2G - 2 pcs VIPER12ASTR-E - 3 pcs VIPER12A - 5 pcs ST1S10PHR MC33063 КР142ЕН5А - 150 шт. В герметичных упаковках. 4. Прочее 74HC595 - 50 шт. ADM485 ( SO8 ) Отправка почтой из Томска.
- 3 ответа
-
-1
-
- stm8s
- stm32 ncp1013
- (и ещё 4 )