Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
  • Страница:
  • 1
  • 2

ТЕМА: Никто не имеет леченого mikroC для PIC и AVR?

Никто не имеет леченого mikroC для PIC и AVR? 5 года 5 мес. назад #26

  • GREY
  • GREY аватар
  • Не в сети
  • Новичок
Openreel писал(а):
GREY писал(а):
АЦП слабый? Да ладно, это смотря с чем сравнивать.
дело даже не в больших шумах или быстродействии, а в радикально низком входном сопротивлении. В этом плане даже самый похабный АВР сильно лучше.

Хочешь изучать - смотри линейку www.st.com/en/m...roductId=SS1574
Недорогие, не шибко требовательные к печатке и по внутренностям все хорошо.

Короче, просто купи недорогую плату и поиграйся - понравится - прекрасно, не понравится и фиг с ним. Не попробуешь не узнаешь.
А купил. Правда с STM32F103CB на борту. Посмотрю как оно, может понравится.
Сергей
Администратор запретил публиковать записи гостям.

Никто не имеет леченого mikroC для PIC и AVR? 5 года 4 мес. назад #27

краткий "отчет" по работе с стм32
Администратор запретил публиковать записи гостям.

Никто не имеет леченого mikroC для PIC и AVR? 5 года 4 мес. назад #28

  • GREY
  • GREY аватар
  • Не в сети
  • Новичок
DSG, турбомотор и Гольф мк.1. Красиво накрасить-напердолить и будет очень нарядно.
К сожалению в нашей стране такие машины обходятся очень дорого, если хочешь ехать просто по дороге. Узаконить трудно, долго и дорого. Один раз мы сделали нечто похожее, на старой банке 3 БМВ: 3.5 шестерку с наддувом. Рулилось так себе но вперед ехало - караул. Я на ней откровенно поссыкивал ехать.

Молодцы вы там.
Сергей
Администратор запретил публиковать записи гостям.

Никто не имеет леченого mikroC для PIC и AVR? 5 года 4 мес. назад #29

Да это же для драга. По дорогам она больше ездить не будет. :)
Администратор запретил публиковать записи гостям.

Никто не имеет леченого mikroC для PIC и AVR? 5 года 4 мес. назад #30

А в stm32 оказывается нет EEPROM !
Администратор запретил публиковать записи гостям.

Никто не имеет леченого mikroC для PIC и AVR? 5 года 4 мес. назад #31

  • GREY
  • GREY аватар
  • Не в сети
  • Новичок
Может там флеш надежная насмерть?
Сергей
Администратор запретил публиковать записи гостям.

Никто не имеет леченого mikroC для PIC и AVR? 5 года 4 мес. назад #32

Хз насколько надежная, но в интернетах рассказывают о способах записи во флеш
Администратор запретил публиковать записи гостям.

Никто не имеет леченого mikroC для PIC и AVR? 5 года 4 мес. назад #33

Артём писал(а):
А в stm32 оказывается нет EEPROM !
В L серии есть.
www.st.com/en/m...roductId=SS1295
Администратор запретил публиковать записи гостям.

Никто не имеет леченого mikroC для PIC и AVR? 5 года 4 мес. назад #34

Артём писал(а):
Хз насколько надежная, но в интернетах рассказывают о способах записи во флеш
Да все там хорошо с надежностью, как отвести кусок флеша под еепром давным давно даже официальные апноты были.
Если с 32f103, то могут быть приколы, все работает как положено, но отладчик этого не видит.
Администратор запретил публиковать записи гостям.

Никто не имеет леченого mikroC для PIC и AVR? 5 года 4 мес. назад #35

Openreel писал(а):
Артём писал(а):
Хз насколько надежная, но в интернетах рассказывают о способах записи во флеш
Да все там хорошо с надежностью, как отвести кусок флеша под еепром давным давно даже официальные апноты были.
Если с 32f103, то могут быть приколы, все работает как положено, но отладчик этого не видит.
Ага, я видел отсылки к этому апноту. Помудохаюсь, но сделаю.
Администратор запретил публиковать записи гостям.

Никто не имеет леченого mikroC для PIC и AVR? 5 года 4 мес. назад #36

  • GREY
  • GREY аватар
  • Не в сети
  • Новичок
Вот что я имею сказать: сегодня заходил долги отдать, да всякого набрать один мужчина, хитрый. И разговаривать с ним на такие темы трудно, но что то я из беседы почерпнул. Так вот, по аппаратной части: они пользуются СТМ, Атмел и Инфинон, разово пользовались Ренсасом и еще чем то. Так что получается, что не из пальца насосал, а имеет опыт. Так вот, говорит, что у СТ много доков, много примеров, но в доках есть ошибки и засады, что зачастую не получается что то запустить, что как бы есть. У Атмела доков поменьше, но можно разобраться. А Инфинеон - мощная штука, периферия есть редкостная, но доки - говно, в которых много просто нет и никакого быстрого старта не стоит ожидать. К примеру им проложила пару морщин на лбу инициализация стека драйверов полевиков.
Ну это больше про процы пожирнее, не самые слабые серии. Одним словом: советует присмотреться к Атмелу. И еще, говорит, что СТ можно вывести из строя простым коротышом на землю. Как то вот это напрягло меня. ПИКу можно вообще все ноги в землю упереть и поставить высокий, он от перегрева только сдохнет.
Про среды разработки сказал, что ничего не знает, а они просто купили Кейл. Еще вспоминал тех немцев, что программатор Ж-Линк выпускают, забыл как называется. Про Куб говорил только матные слова, использовать только как справку/подсказку. И еще сказал, что есть среда EmBitz - тут я могу и на3.14здеть, но вроде так. Бесплатная.
Вот такие слухи, краем сходятся с тем, что Миша пишет.
А по флешу, да! Говорил, что нужно скользить, есть готовые рутины.
И да, зашел разговор за ПИД, он сказал, что есть очень простое и элегантное решение без ПИДа: одномерный массив, где адрес - ошибка, а значение мощность. Говорит, что это отлично работает и совсем не занимает места. Нужно попробовать. И я так думаю, что нехрен городить фазовое управление, нужно работать полными полупериодами с переключением в 0. Все эти наши терморегуляторы с дикой инерцией, быстрое управление никуда не впиралось.
Сергей
Администратор запретил публиковать записи гостям.

Никто не имеет леченого mikroC для PIC и AVR? 5 года 4 мес. назад #37

с записью во флешь я "разобрался", в смысле - работает.
Администратор запретил публиковать записи гостям.

Никто не имеет леченого mikroC для PIC и AVR? 5 года 4 мес. назад #38

GREY писал(а):
Про Куб говорил только матные слова, использовать только как справку/подсказку.
я по началу работы с AVR все настройки забивал руками, тратил вечность, а потом плюнул и начал щелкать в codewizard, что в code vision avr идет. И так легко сразу стало. Мне кажется, если бы не куб, я бы до сих пор пытался настроить контроллер, а гольф бы так и стоял мебелью в гараже.
Администратор запретил публиковать записи гостям.

Никто не имеет леченого mikroC для PIC и AVR? 5 года 4 мес. назад #39

  • GREY
  • GREY аватар
  • Не в сети
  • Новичок
Я как-то смущен всем этим. Там руками настроить - жопа! Может если наделать шаблонов с хорошими подсказками как то и можно руками, но всё равно сомнительно. Или надо этим заниматься плотно, типа такую работу иметь.

И да, визуально прёт как надо.
Сергей
Последнее редактирование: 5 года 4 мес. назад от GREY.
Администратор запретил публиковать записи гостям.

Никто не имеет леченого mikroC для PIC и AVR? 5 года 4 мес. назад #40

GREY писал(а):
Я как-то смущен всем этим. Там руками настроить - жопа! Может если наделать шаблонов с хорошими подсказками как то и можно руками, но всё равно сомнительно.
Хватит сопли жевать, в шоке просто.
У вас там чего, в проектах ВСЯ возможная периферия задействована, да еще в самых извратных конфигах, а скрок сдачи вчера?!

Что сложного настроить к примеру пин для дрыгоножества?
прмер - на плате 4 светодиода, хочется ими гореть/не гореть/ксорить
typedef struct
{
   GPIO_TypeDef* gpio_led;
   uint16_t pin_led;
   uint32_t rcc_gpio_bus;
} tLedItemDef;

const tLedItemDef pcb_ledPropItems[4]=
{
    // for  45.1
    { GPIOC,GPIO_Pin_9,   RCC_AHBPeriph_GPIOC}, // led_green
    { GPIOC,GPIO_Pin_12,  RCC_AHBPeriph_GPIOC}, // led_red
    { GPIOD,GPIO_Pin_2,   RCC_AHBPeriph_GPIOD}, // led_expence
    { GPIOB,GPIO_Pin_8,   RCC_AHBPeriph_GPIOB}, // led_link
};

void PCB_LedsInit(void)
{
  uint8_t led_idx;
  GPIO_InitTypeDef GPIO_InitStructure;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_1;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;


  for(led_idx = 0;led_idx<4;led_idx++)
  {
    RCC_AHBPeriphClockCmd(pcb_ledPropItems[led_idx].rcc_gpio_bus, ENABLE);
    GPIO_InitStructure.GPIO_Pin =  pcb_ledPropItems[led_idx].pin_led;
    GPIO_Init(pcb_ledPropItems[led_idx].gpio_led, &GPIO_InitStructure);
  }

  GPIO_WriteBit(pcb_ledPropItems[0].gpio_led,pcb_ledPropItems[0].pin_led,Bit_SET);
  GPIO_WriteBit(pcb_ledPropItems[1].gpio_led,pcb_ledPropItems[1].pin_led,Bit_SET);
  GPIO_WriteBit(pcb_ledPropItems[2].gpio_led,pcb_ledPropItems[2].pin_led,Bit_SET);
  GPIO_WriteBit(pcb_ledPropItems[3].gpio_led,pcb_ledPropItems[3].pin_led,Bit_SET);

}

void PCB_LedOn(uint8_t ledId)
{
  if (ledId<4)
  {
    GPIO_WriteBit(pcb_ledPropItems[ledId].gpio_led,pcb_ledPropItems[ledId].pin_led,Bit_RESET);
  }
}
void PCB_LedXor(uint8_t ledId)
{
  if (ledId<4)
  {
    if ((pcb_ledPropItems[ledId].gpio_led->ODR & (pcb_ledPropItems[ledId].pin_led)) != (uint32_t)Bit_RESET)
    {
        pcb_ledPropItems[ledId].gpio_led->BRR = pcb_ledPropItems[ledId].pin_led;
    }
    else
    {
        pcb_ledPropItems[ledId].gpio_led->BSRR = pcb_ledPropItems[ledId].pin_led;
    }
  }
}
void PCB_LedOff(uint8_t ledId)
{
  if (ledId<4)
  {
    GPIO_WriteBit(pcb_ledPropItems[ledId].gpio_led,pcb_ledPropItems[ledId].pin_led,Bit_SET);
  }
}

Имеем набор функцмий с префиксом PCB_ для дрыганья ножкой и под новую плату надо только несколько строк поправить с конфигом.
Это было так офигенно сложно, да?!


Я обычно делаю свою мини библотеку низкоуровневую под конкретную плату. И в пространстве приложения уже вызывается функия типа дай сухой контактк номер 3 или включи привод.
Для уартов у меня немного сложней, приложение вообще не привязано к номеру уарта и пинам, на этапе описания платы закладываются все сериальные интерфейсы, потом оно инитится разом и даже переключение прием-передача для 485ых идет полуавтоматом.
пример для ф071
хедер
typedef void(*cpu_isrptr_t)(void);


extern  uint16_t PCB_GetUartDePin(uint8_t usart_idx);

extern  GPIO_TypeDef* PCB_GetUartDeGPIO(uint8_t usart_idx);

extern  uint8_t PCB_GetUartIrqChannel(uint8_t usart_idx);

extern  void PCB_RS485_Dir_Set(uint8_t usart_idx,uint8_t de_tx_mode);

extern  USART_TypeDef* PCB_USART_Init(uint8_t usart_idx,uint32_t u_BaudRate,uint16_t u_WordLength,uint16_t u_StopBits,uint16_t u_Parity, uint8_t  enable485);

 // assign NVIC priority and user ISR handler to USART
extern  void PCB_UsartAssignIsr(uint8_t usart_idx, uint8_t nvic_IRQChannelPreemptionPriority,  uint8_t nvic_IRQChannelSubPriority, cpu_isrptr_t);

код
typedef struct
{
   USART_TypeDef* usartTD;
   uint32_t rcc_UsartClk;
   uint32_t rcc_bus;
   GPIO_TypeDef* gpio_tx;
   uint16_t pin_tx;
   GPIO_TypeDef* gpio_rx;
   uint16_t pin_rx;
   uint16_t pin_af_tx;
   uint16_t pin_af_rx;

   GPIO_TypeDef* gpio_de;
   uint16_t pin_de;
   uint32_t rcc_gpio_bus;
   uint8_t nvic_IRQChannel;
   uint8_t usart_AF;

} tUsartItemDef;
#define MAX_PCB_USART_ID 2

const tUsartItemDef pcb_usartPropItems[MAX_PCB_USART_ID]=
{
    // for STM32F071 & XR45_1
    {USART1,RCC_USART1CLK_HSI,RCC_APB2Periph_USART1, GPIOB,GPIO_Pin_6,  GPIOB,GPIO_Pin_7,  GPIO_PinSource6,GPIO_PinSource7,  0,0,              RCC_AHBPeriph_GPIOA,USART1_IRQn,GPIO_AF_0},
    {USART3,RCC_USART3CLK_HSI,RCC_APB1Periph_USART3, GPIOC,GPIO_Pin_10, GPIOC,GPIO_Pin_11, GPIO_PinSource10,GPIO_PinSource11,GPIOA,GPIO_Pin_1, RCC_AHBPeriph_GPIOA,USART3_4_IRQn,GPIO_AF_1},
};

// pointer to isr
typedef void(*cpu_isrptr_t)(void);

cpu_isrptr_t usart_irq_user_handlers[5]=
{(cpu_isrptr_t)NULL,(cpu_isrptr_t)NULL,(cpu_isrptr_t)NULL,(cpu_isrptr_t)NULL,(cpu_isrptr_t)NULL};





uint16_t PCB_GetUartDePin(uint8_t usart_idx)
{
  if((usart_idx<1)||(usart_idx>MAX_PCB_USART_ID))return(0);
  usart_idx--;
  return(pcb_usartPropItems[usart_idx].pin_de);
}

GPIO_TypeDef* PCB_GetUartDeGPIO(uint8_t usart_idx)
{
  if((usart_idx<1)||(usart_idx>MAX_PCB_USART_ID))return(NULL);
  usart_idx--;
  return(pcb_usartPropItems[usart_idx].gpio_de);
}


void PCB_RS485_Dir_Set(unsigned char usart_idx,uint8_t de_tx_mode)
{
  if((usart_idx<1)||(usart_idx>MAX_PCB_USART_ID))return;
  usart_idx--;
  if (0 == pcb_usartPropItems[usart_idx].pin_de) return;
  if (de_tx_mode)
  {
      pcb_usartPropItems[usart_idx].gpio_de->BSRR = pcb_usartPropItems[usart_idx].pin_de;
  }else
  {
      pcb_usartPropItems[usart_idx].gpio_de->BRR = pcb_usartPropItems[usart_idx].pin_de;
  }
}

uint8_t PCB_GetUartIrqChannel(uint8_t usart_idx)
{
  if((usart_idx<1)||(usart_idx>MAX_PCB_USART_ID))return(0);
  usart_idx--;
  return(pcb_usartPropItems[usart_idx].nvic_IRQChannel);

}

USART_TypeDef* PCB_USART_Init(uint8_t  usart_idx,
                              uint32_t u_BaudRate,
                              uint16_t u_WordLength,
                              uint16_t u_StopBits,
                              uint16_t u_Parity,
                              uint8_t  enable485)
{

  USART_InitTypeDef usart_InitStructure;
  GPIO_InitTypeDef gpio_InitStructure;

  if((usart_idx<1)||(usart_idx>MAX_PCB_USART_ID))return(NULL);
  usart_idx--;

  RCC_AHBPeriphClockCmd(pcb_usartPropItems[usart_idx].rcc_gpio_bus, ENABLE);
  if(usart_idx == 0) // usart1 wired to a different bus
  {
    RCC_APB2PeriphClockCmd(pcb_usartPropItems[usart_idx].rcc_bus , ENABLE);
  }else
  {
    RCC_APB1PeriphClockCmd(pcb_usartPropItems[usart_idx].rcc_bus , ENABLE);
  }

  //GPIO_DeInit(GPIOA);
  RCC_USARTCLKConfig(pcb_usartPropItems[usart_idx].rcc_UsartClk);


   /* Configure pins as AF pushpull */
   gpio_InitStructure.GPIO_Mode = GPIO_Mode_AF;
   gpio_InitStructure.GPIO_Speed = GPIO_Speed_Level_3;
   gpio_InitStructure.GPIO_OType = GPIO_OType_PP;
   gpio_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;

   gpio_InitStructure.GPIO_Pin = pcb_usartPropItems[usart_idx].pin_tx;
   GPIO_Init(pcb_usartPropItems[usart_idx].gpio_tx, &gpio_InitStructure);
   gpio_InitStructure.GPIO_Pin = pcb_usartPropItems[usart_idx].pin_rx;
   GPIO_Init(pcb_usartPropItems[usart_idx].gpio_rx, &gpio_InitStructure);

   /* Connect pin to Periph */
   GPIO_PinAFConfig(pcb_usartPropItems[usart_idx].gpio_tx, pcb_usartPropItems[usart_idx].pin_af_tx, pcb_usartPropItems[usart_idx].usart_AF);
   GPIO_PinAFConfig(pcb_usartPropItems[usart_idx].gpio_rx, pcb_usartPropItems[usart_idx].pin_af_rx, pcb_usartPropItems[usart_idx].usart_AF);


  if((enable485)&& (0 != pcb_usartPropItems[usart_idx].pin_de))
  { // Configure  485 DE
    gpio_InitStructure.GPIO_Pin = pcb_usartPropItems[usart_idx].pin_de;
    gpio_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
    gpio_InitStructure.GPIO_OType = GPIO_OType_PP;
    gpio_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
    gpio_InitStructure.GPIO_Speed = GPIO_Speed_Level_3;
    GPIO_Init(pcb_usartPropItems[usart_idx].gpio_de, &gpio_InitStructure);
    pcb_usartPropItems[usart_idx].gpio_de->BRR = pcb_usartPropItems[usart_idx].pin_de;
  }

  usart_InitStructure.USART_BaudRate = u_BaudRate;
  usart_InitStructure.USART_WordLength = u_WordLength;
  usart_InitStructure.USART_StopBits = u_StopBits;
  usart_InitStructure.USART_Parity = u_Parity;
  usart_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  usart_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

  USART_Init(pcb_usartPropItems[usart_idx].usartTD, &usart_InitStructure);
  USART_Cmd(pcb_usartPropItems[usart_idx].usartTD, ENABLE);
  //debug_usart = pcb_usartPropItems[usart_idx].usartTD;
  return(pcb_usartPropItems[usart_idx].usartTD);
}

void PCB_UsartAssignIsr(uint8_t usart_idx, uint8_t nvic_IRQChannelPreemptionPriority,  uint8_t nvic_IRQChannelSubPriority, cpu_isrptr_t cpu_isrptr)
{
  NVIC_InitTypeDef  nvic_InitStructure;

  if((usart_idx<1)||(usart_idx>MAX_PCB_USART_ID))return;
  usart_idx--;

  usart_irq_user_handlers[usart_idx] = cpu_isrptr;
    /* Enable the USARTx Interrupt */
  nvic_InitStructure.NVIC_IRQChannel = pcb_usartPropItems[usart_idx].nvic_IRQChannel;
  nvic_InitStructure.NVIC_IRQChannelPriority = nvic_IRQChannelPreemptionPriority;
  nvic_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&nvic_InitStructure);
}


void USART1_IRQHandler(void)
{
    if(usart_irq_user_handlers[0]!=NULL)
      (*usart_irq_user_handlers[0])();
}

void USART3_4_IRQHandler(void)
{
  if(usart_irq_user_handlers[1]!=NULL)
    (*usart_irq_user_handlers[1])();
}
Когда суровый код организован таким образом, то даже портирование реальных(10-40к строк) проджектов с 8 и 16 бит под арм делается элементарно.

На самом деле особой проблемы настроить переферию нет, главное бить линейкой по пальцам за лазанье напрямую по регистрам без явной необходимости.
Работа с переферией всеравно сложней, а никакой куб в этом не поможет.
К примеру прерывание по уарту разршено для окончания переддачи и приема символа. Прерывание происходит, но оба этих флага пусты. Если забить на это болт, то это прерывание будет крутиться вечно, пока не будет устранена причина. На столе скорей всего причина никогда не возникнет, а возникнет в реальном применении, да не сразу, а когда шина будет сильно зашумлена.
И чем тут поможет куб??????
Администратор запретил публиковать записи гостям.

Никто не имеет леченого mikroC для PIC и AVR? 5 года 4 мес. назад #41

  • GREY
  • GREY аватар
  • Не в сети
  • Новичок
Для меня проблема в том, что это совершенно не человекочитаемо! У тех же пиков даже имена регистров и битов сразу понятны, а тут даже слой над нифига не понятен. Вопрос привычки?
Сергей
Администратор запретил публиковать записи гостям.

Никто не имеет леченого mikroC для PIC и AVR? 5 года 4 мес. назад #42

GREY писал(а):
Для меня проблема в том, что это совершенно не человекочитаемо! У тех же пиков даже имена регистров и битов сразу понятны, а тут даже слой над нифига не понятен. Вопрос привычки?
Вопрос знаний. Надо курить RM ну или какой букварь по основам архитектуры. Нативные библиотеки от ST - фактический человечий доступ к регистрам и низкому уровню, если ты понимаешь как железо работает, то привыкнуть к этим библиотекам уже элементарно, а плюсов по сравнению с прямым обращениям к регистрам довольно много.

кусок из реального проекта

терминал на уарте, инициализация

#define MTBUFF_LEN 30

typedef struct
{
  USART_TypeDef* usart;
  u32 dummypad2;
  char buff[MTBUFF_LEN];
  uint8_t rxpos;
  uint8_t rx_done_flag;
  uint8_t usart_id;
 
} tmtvar;
tmtvar mtvar;


void MTerm_InitHard(uint8_t usart_id, uint8_t nvic_IRQChannelPreemptionPriority)
{
  mtvar.usart_id = usart_id;
  
  mtvar.usart =  PCB_USART_Init(usart_id,115200,USART_WordLength_8b,USART_StopBits_1,USART_Parity_No, FALSE);
  
  PCB_UsartAssignIsr(mtvar.usart_id, nvic_IRQChannelPreemptionPriority,0, MTerm_USART_IRQHandler);
  
  /* Enable USART */
  USART_Cmd(mtvar.usart, ENABLE);
  USART_ITConfig(mtvar.usart, USART_IT_TXE, DISABLE);
  USART_ITConfig(mtvar.usart, USART_IT_TC, DISABLE);
  USART_ITConfig(mtvar.usart, USART_IT_RXNE, ENABLE);
}
.
обработчик прерывания
void MTerm_USART_IRQHandler(void)
{
  char rxc;
  if(USART_GetFlagStatus(mtvar.usart, USART_FLAG_ORE) != RESET) //OverRun Error flag.
  {
    USART_ClearFlag(mtvar.usart,USART_FLAG_ORE);
  }


  if(USART_GetITStatus(mtvar.usart, USART_IT_RXNE) != RESET)
  {
    rxc = (char)USART_ReceiveData(mtvar.usart);
    
    if(mtvar.rxpos < MTBUFF_LEN)
    {
      if(	rxc == '\r')
      {
        rxc =0;
        mtvar.rx_done_flag = 1;
        USART_ITConfig(mtvar.usart, USART_IT_RXNE, DISABLE);
      }
      mtvar.buff[mtvar.rxpos] = rxc;

      mtvar.rxpos++;
      if(rxc==0)mtvar.rxpos=0;
    }else
    {
      mtvar.buff[0] = rxc;
      mtvar.rxpos=1;
    }
    return;
  }
}


передача идет вне прерывания в данном случае.

в мейне терминал инитим одной строкой
MTerm_InitHard(TERMINAL_PCB_UART_ID, MTERM_UART_IRQ_PRIORITY);

в конфиге проекта поменяв одну дефайн строку TERMINAL_PCB_UART_ID можем терминал повесить не просто на другой уарт, а на другой сериальный порт.
И все полетит автоматом, даже если один порт был на 232 а другой на 485.
Администратор запретил публиковать записи гостям.

Никто не имеет леченого mikroC для PIC и AVR? 5 года 4 мес. назад #43

Беру две своих абсолютно разных платы, одна с stm32071, другая с stm32f103.

5 уартов, 3 из них с RS-485
typedef struct
{
   USART_TypeDef* usartTD;
   uint32_t rcc_bus;
   GPIO_TypeDef* gpio_tx;
   uint16_t pin_tx;
   GPIO_TypeDef* gpio_rx;
   uint16_t pin_rx;
   GPIO_TypeDef* gpio_de;
   uint16_t pin_de;
   uint32_t rcc_gpio_bus;
   uint8_t nvic_IRQChannel;

} tUsartItemDef;

const tUsartItemDef pcb_usartPropItems[5]=
{
    // for STM32F103x[CDE] & XR23
    {USART1,RCC_APB2Periph_USART1, GPIOA,GPIO_Pin_9,  GPIOA,GPIO_Pin_10, 0,0,               RCC_APB2Periph_GPIOA,                 USART1_IRQn},
    {USART2,RCC_APB1Periph_USART2, GPIOA,GPIO_Pin_2,  GPIOA,GPIO_Pin_3,  GPIOA,GPIO_Pin_1 , RCC_APB2Periph_GPIOA,                 USART2_IRQn},
    {USART3,RCC_APB1Periph_USART3, GPIOB,GPIO_Pin_10, GPIOB,GPIO_Pin_11, GPIOB,GPIO_Pin_1 , RCC_APB2Periph_GPIOB,                 USART3_IRQn},
    {UART4, RCC_APB1Periph_UART4,  GPIOC,GPIO_Pin_10, GPIOC,GPIO_Pin_11, GPIOB,GPIO_Pin_6 ,(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOB),UART4_IRQn},
    {UART5, RCC_APB1Periph_UART5,  GPIOC,GPIO_Pin_12, GPIOD,GPIO_Pin_2,  0,0              ,(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD),UART5_IRQn},
};

И 2 уарта, 1 с 485
typedef struct
{
   USART_TypeDef* usartTD;
   uint32_t rcc_UsartClk;
   uint32_t rcc_bus;
   GPIO_TypeDef* gpio_tx;
   uint16_t pin_tx;
   GPIO_TypeDef* gpio_rx;
   uint16_t pin_rx;
   uint16_t pin_af_tx;
   uint16_t pin_af_rx;

   GPIO_TypeDef* gpio_de;
   uint16_t pin_de;
   uint32_t rcc_gpio_bus;
   uint8_t nvic_IRQChannel;
   uint8_t usart_AF;

} tUsartItemDef;
#define MAX_PCB_USART_ID 2

const tUsartItemDef pcb_usartPropItems[MAX_PCB_USART_ID]=
{
    // for STM32F071 & XR45_1
    {USART1,RCC_USART1CLK_HSI,RCC_APB2Periph_USART1, GPIOB,GPIO_Pin_6,  GPIOB,GPIO_Pin_7,  GPIO_PinSource6,GPIO_PinSource7,  0,0,              RCC_AHBPeriph_GPIOA,USART1_IRQn,GPIO_AF_0},
    {USART3,RCC_USART3CLK_HSI,RCC_APB1Periph_USART3, GPIOC,GPIO_Pin_10, GPIOC,GPIO_Pin_11, GPIO_PinSource10,GPIO_PinSource11,GPIOA,GPIO_Pin_1, RCC_AHBPeriph_GPIOA,USART3_4_IRQn,GPIO_AF_1},
};
Разные архитектуры усартов у процов дают разные типы структур tUsartItemDef.
В структуре pcb_usartPropItems полностью описываются все сериальные интерфейсы на одной плате, номера уартов, пины на которые он размаплен в конкретной плате, шина на которой сидит и как ее включить, наличие и свойства пина для переключения прием-передача....
Если на одном проце несколько разных плат, то исходник библиотеки с уартом отличается только наполнением структуры pcb_usartPropItems.

Я могу взять полный исходник терминала и не меня в нем ни одного байта(за исключением мелких правок обработчика прерывания, поскольку разные процы) пересунуть его с одной платы на другую и он взлетит.
Администратор запретил публиковать записи гостям.

Никто не имеет леченого mikroC для PIC и AVR? 5 года 4 мес. назад #44

  • GREY
  • GREY аватар
  • Не в сети
  • Новичок
Наверное нужно поковырять .h файлы на пре.дмет что есть что и станет понятнее. Понять саму систему. Пока лес в болоте, даже не не просто лес и не просто болото.

Но идея понятна, есть код, есть, условно, слой абстракции железа, портировать код можно не меняя код, просто заменой слоя абстракции. Имеем дело с компьютером, а не с микропроцессором, опять же условно. Но пака, для меня, код читается тяжело, потому, что я не знаю железо - железо сложное и его много.
Сергей
Администратор запретил публиковать записи гостям.

Никто не имеет леченого mikroC для PIC и AVR? 5 года 4 мес. назад #45

Не хотел у меня CAN на прием работать. Точнее, 1-2 раза залетал в прерывание при приеме, а потом всё, обходил его стороной. Поехал к приятелю, он посидел, потупил во всё моё безобразие, поматерился на то что сгенерировал куб для can шины, чего-то там дописал пару строчек, что бы игнорировалось то что наделал куб и прием заработал. Оно какую-то ошибку выкидывало, когда одновременно пыталась работать и прием и передача.
Администратор запретил публиковать записи гостям.

Никто не имеет леченого mikroC для PIC и AVR? 5 года 3 мес. назад #46

  • GREY
  • GREY аватар
  • Не в сети
  • Новичок
У нас тут свалка про МК, я тут и спрошу: я всегда ставил разъём для программирования, раньше пины были от фонаря, теперь как в даташите. Цена разъема невелика, но тем не менее он не всегда есть в тумбочке, занимает место. Видел тут на видео у одного пого-пинс и просто площадки на ПП. Ну, я бы ещё по центру площадок сделал в меди яму. Так он просто прижимал маленькую платку рукой и программировал. Решение имеет право жить или это баловство и нужно продолжать ставить разъём? Есть опыт?
Сергей
Администратор запретил публиковать записи гостям.

Никто не имеет леченого mikroC для PIC и AVR? 5 года 3 мес. назад #47

был опыт и сейчас вернулся к этому. В плате отверстия в 1 ряд, вкидываешь штырьки на проводах с программатора, придавливаешь пальцем, прошиваешь.
Администратор запретил публиковать записи гостям.

Никто не имеет леченого mikroC для PIC и AVR? 5 года 3 мес. назад #48

GREY писал(а):
. Видел тут на видео у одного пого-пинс и просто площадки на ПП.
Современное решение из пром производства или автоматического тестирования.
Нормально работает, если надо только прошить и забыть. Если надо дебажить, то ну его нафиг.
Администратор запретил публиковать записи гостям.

Никто не имеет леченого mikroC для PIC и AVR? 5 года 3 мес. назад #49

  • GREY
  • GREY аватар
  • Не в сети
  • Новичок
Openreel писал(а):
GREY писал(а):
. Видел тут на видео у одного пого-пинс и просто площадки на ПП.
Современное решение из пром производства или автоматического тестирования.
Нормально работает, если надо только прошить и забыть. Если надо дебажить, то ну его нафиг.
Про дибажить как то не подумал. Но я в живом железе и не налаживал особенно никогда. Ну разве что выводил содержимое переменной какой нибудь в порт. Вот хочу научиться УАРТом пользоваться.
Спасибо.
Сергей
Администратор запретил публиковать записи гостям.
  • Страница:
  • 1
  • 2