Jump to content
Sign in to follow this  
gafbich

STM8S103F3P6

Recommended Posts

Объясните пожалуйста следующие, на руках имеется 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;
}
                                                           

 

Edited by gafbich

Share this post


Link to post
Share on other sites

Ну если я правильно помню, то для обновление счетных регистров надо сгенерировать update event. Далее, зачем сравнивать счетные регистры с числом d, если за вас это сделает счётчик и поднимет флаг переполнения?

Share this post


Link to post
Share on other sites

Вы имеете ввиду UIF флаг (TIM1_SR1)

void delay_us(unsigned int d)
{
  TIM1_CNTRH=0;TIM1_CNTRL=0;
  TIM1_ARRH=((d&0xFF00)>>8);
  TIM1_ARRL=d&0x00FF;
  while((TIM1_SR1&(1<<0))!=1){};
  TIM1_SR1&=~(1<<0);
}

 

Share this post


Link to post
Share on other sites

Конденсаторы Panasonic. Часть 4. Полимеры – номенклатура

В заключительной, четвертой статье из цикла «Конденсаторы Panasonic» рассматриваются основные достоинства и особенности использования конденсаторов этого японского производителя на основе полимерной технологии. Главной конструктивной особенностью таких конденсаторов является полимерный материал, используемый в качестве проводящего слоя. Полимер обеспечивает конденсаторам высокую электрическую проводимость и пониженное эквивалентное сопротивление (ESR). Номинальная емкость и ESR отличается в данном случае высокой стабильностью во всем рабочем диапазоне температур. А повышенная емкость при низком ESR идеальна для решения задач шумоподавления и ограничения токовых паразитных импульсов в широком частотном диапазоне.

Читать статью

Да кажется этот флаг.

@gafbich вот код для STM8L152C6T6. На седьмом пине на дискавери светодиод, все моргает.

 

#include <iostm8l152c6.h>

void delay( unsigned int d )
{
  TIM1_ARRH = d >> 8; //TIM1 ovf value
  TIM1_ARRL = d & 0xFF;
  TIM1_CNTRH = 0; //counter = 0 now
  TIM1_CNTRL = 0; 
  TIM1_EGR_bit.UG = 1;  //Call for Update Event
  TIM1_SR1_bit.UIF = 0; //clear flag
  TIM1_CR1_bit.CEN = 1; //start TIM1
  while ( TIM1_SR1_bit.UIF == 0 ); //waiting for event
}


void main()
{
  unsigned int prsc = 15999; // TIM1 prescaler - 1
  
  CLK_CKDIVR_bit.CKM = 0; //16 MHz system clocking
  CLK_PCKENR2_bit.PCKEN21 = 1; //Timer1 clocked
  TIM1_PSCRH = prsc >> 8; //High byte of prescaler
  TIM1_PSCRL = prsc & 0xFF; //Low byte of prescaler
  TIM1_CR1_bit.OPM = 1; // start only onse
  TIM1_CR1_bit.URS = 1; //event only if OVF
  //1 tick = 1 ms
  
  PC_DDR_bit.DDR7 = 1; //PC7 as outout
  PC_CR1_bit.C17 = 1; //PP mode
  PC_CR2_bit.C27 = 1; // high speed
  
  while ( true )
  {
    PC_ODR_bit.ODR7 ^= 1; //invert LED
    delay( 1000 ); //1000 ms delay
  }
}

 

Писал минут пять, проблем не возникло

Share this post


Link to post
Share on other sites

Попробовал Ваш пример - не пашет( Вот в чем проблема не пойму.

Прошу прощения, Ваш пример и в правду работает! Спасибо

Edited by gafbich

Share this post


Link to post
Share on other sites
                     

STM32G0 - средства противодействия угрозам безопасности

Результатом выполнения требований безопасности всегда является усложнение разрабатываемой системы. Особенно чувствительными эти расходы стали теперь, в процессе массового внедрения IoT. Обладая мощным набором инструментов информационной безопасности, микроконтроллеры STM32G0 производства STMicroelectronics, объединив в себе невысокую цену, энергоэффективность и расширенный арсенал встроенных аппаратных инструментов, способны обеспечить полную безопасность разрабатываемого устройства.

Подробнее...

Еще один вопрос, в чем может быть затык в работе SPI на STM8S, к примеру настраивал на STM32 проблем вообще не было. а на данном камне мне посл каждой посылки (передачи) надо делать задержу в 20 nop`ОВ, а  иначе выброс кривой, если что могу кинуть с лог анализатора что получается без nop а что с nop

 

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

  • Similar Content

    • By megavolt3101
      Здравствуйте уважаемые форумчане. Пытаюсь связать два микроконтроллера по шине 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
      }
    • By shemmer
      Продам микросхемы. Все новое. 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 )  
      Отправка почтой из Томска.
       
       
    • By Рена
      Прошу помощи в создании ШИМ регулятора вентилятора охлаждения двигателя на STM8S.
      В программировании навыков нет, учусь потихоньку, пока заказал STM8S-Discovery.
      Задача - плавное вкл/выкл. (программируемое значение) и регулирование оборотов вентилятора (ШИМ от 20-95%) в зависимости от температуры с датчика.
      Если есть возможность помогите.
    • By Norad2142
      Здравствуйте! Собираю платформу на основе гусеничного танка на микроконтроллере STM8S. Требуется сделать так, чтобы пройденный путь измерялся датчиком. В качестве датчика подумал использовать оптопару от компьютерной мыши. Нашел вот такую схему http://www.qrz.ru/schemes/contribute/comp/mouse.shtml, решил использовать вместо данного ОУ готовый компаратор LM339. Но с ним у меня начались проблемы. Сначала я хотел посмотреть, как работает компаратор. Поставил его на макетную плату, запитал от 5В, на неинвертирующий вход подал те же 5 В, а на инвертирующий 2,5 В в качестве опорного. По логике компаратор должен был выдать на выходе напряжение логической единицы, но там абсолютный 0. Подскажите пожалуйста, что я не так сделал, может чего не хватает?

  • Сообщения

    • Более менее разбирающемуся в приборчиках радиолюбителю и так знакомо, что резисторы в цепи шунта бывают кратны девятке. Там по схеме где то стоит 100 Ом, а шунтовые резисторы 0.9 , 9, 90, 900, 9к, и дальше. 
    • Только дошёл чтоли?
    • Да, плата одна и БП один, а вот сами усилители разведены отдельно и земли собираются отдельно на мекке конденсаторов БП.  Но это тема другого усилителя. Тут не актуально.  А то ведь могу приплести два ламповых фонокорретора, собирал недавно, навесником  Тоже тишина. 
    • В рамках расхламления продаю следующее: GSM/GPS+bluetooth модули SIM808, новые, в упаковке - 7шт, 400руб, шт. GPS антенны A25-4102920-AMT02 [GPS/GLONASS] - 11шт, цена 50р, шт. Понижающий DC-DC преобразователь на базе LM2596, новый в упаковке - 15шт., 50р, шт. Резисторы 0805, 10кОм, 5%, катушка 3000+ шт. - 350р. за все. Конденсаторы 0402-X7R-16V- 0.10uF (100nF) 10% MC02KTB160104 - катушка 9000+шт, 900руб за все. Отправка почтой по России.
    • Он Вам примерно прикинул кол-во того и того, точных цифр не существует и существовать не может. И это только первый, прикидочный, шаг. Это Вам в раздел "работа" и там, договорившись с исполнителем, Вы сможете определить   и что нибудь решить.
    • Так там у тебя плата одна, то бишь стерео. А в стерео пробоемы петель нет априори.
  • Покупай!

×
×
  • Create New...