реклама на сайте
подробности

 
 
> stm32 uart kline 5baud slow init, помогите плиз
aneox
сообщение May 14 2015, 17:46
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 10-02-15
Пользователь №: 85 066



Для начала диалога с автомобильным эбу нужно передать 0х13 на скорости 5бод, на авр все реализовал и прекрано работает

Код
Serial1.end();
  pinMode(txPin, OUTPUT);
  
  digitalWrite(txPin, HIGH);  
  delay(300);                //W5          
  digitalWrite(txPin, LOW);  //start bit
  delay(200);              
  digitalWrite(txPin, HIGH); // 1 1
  delay(400);                  
  digitalWrite(txPin, LOW); // 0 0
  delay(400);                      
  digitalWrite(txPin, HIGH); // 1
  delay(200);                          
  digitalWrite(txPin, LOW); // 0 0 0
  delay(600);                              
  digitalWrite(txPin, HIGH);  
  delay(200);               //W1                                  
  Serial1.begin(9600);

дальше все гуд



терь задача сделать на 105м стме, сил моих больше нет

Код
void kline(void *pvParameters)
{
    static TickType_t xLastWakeTime;
    UNUSED(pvParameters);

    xLastWakeTime = xTaskGetTickCount();

    for(;;)
    {
        if(!ecuInit)
        {
            if (!slowInit)
            {
                kline_Serial_End();
                vTaskDelay(10);

                GPIO_SetBits(GPIOC, GPIO_Pin_10);
                vTaskDelayUntil(&xLastWakeTime, 300);
                GPIO_ResetBits(GPIOC, GPIO_Pin_10);
                vTaskDelayUntil(&xLastWakeTime, 200);
                GPIO_SetBits(GPIOC, GPIO_Pin_10);
                vTaskDelayUntil(&xLastWakeTime, 400);
                GPIO_ResetBits(GPIOC, GPIO_Pin_10);
                vTaskDelayUntil(&xLastWakeTime, 400);
                GPIO_SetBits(GPIOC, GPIO_Pin_10);
                vTaskDelayUntil(&xLastWakeTime, 200);
                GPIO_ResetBits(GPIOC, GPIO_Pin_10);
                vTaskDelayUntil(&xLastWakeTime, 600);
                GPIO_SetBits(GPIOC, GPIO_Pin_10);
                vTaskDelayUntil(&xLastWakeTime, 200);

                kline_Serial_Start();

                uint32_t timeout = 0;
                while (!slowInit)
                {
                    timeout++;
                    if (timeout >  10)//0xAfffff)
                        break;
                }
                if (!slowInit)
                {
//                    kline_Reset_Pin();
//                    kline_Serial_End();
//                    GPIO_SetBits(GPIOC, GPIO_Pin_10);
                    vTaskDelay(5000);
                    slowInit = 0;
//                  пауза и пробуем снова
                }
            }


Код
void kline_Serial_End(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
    GPIO_Init(GPIOC, &GPIO_InitStructure);

    USART_DeInit(UART4);
    USART_Cmd(UART4, DISABLE);
    USART_ITConfig(UART4, USART_IT_RXNE, DISABLE);

    klineRecieveIndex = 0;


}

void kline_Serial_Start(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    USART_InitTypeDef USART_InitStructure;
    NVIC_InitTypeDef NVIC_InitStructure;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOC, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOC, &GPIO_InitStructure);//UART4

    USART_DeInit(UART4);
    USART_InitStructure.USART_BaudRate = 9600;
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;
    USART_InitStructure.USART_StopBits = USART_StopBits_1;
    USART_InitStructure.USART_Parity = USART_Parity_No;
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
    USART_Init(UART4, &USART_InitStructure);

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
    NVIC_InitStructure.NVIC_IRQChannel = UART4_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);

    USART_Cmd(UART4, ENABLE);
    USART_ITConfig(UART4, USART_IT_RXNE, ENABLE);
}


Код
void UART4_IRQHandler()
{
    uint8_t data;
//    portBASE_TYPE xStatus;

    if((UART4->SR & USART_SR_RXNE))
    {

      data = UART4->DR;

      klineRecieveBuffer[klineRecieveIndex] = data;

      if (klineRecieveIndex > 48)
          klineRecieveIndex = 0;
      else
          klineRecieveIndex++;

      if (!slowInit)
      {
          if (data == 0x8F)
          {
              Usart_Send_symbol(0x70, KLINE_UART);
              klineRecieveIndex = 0;
          }

          if (data == 0xEC)
          {
              slowInit = 1;
              klineRecieveIndex = 0;
          }

                  if(USART_GetITStatus(UART4, USART_SR_ORE) == SET)
                  {
                       USART_ReceiveData(UART4);
                   }
}

      }



Вообщем пару раз прилетает после первой попытки FF и все, при повторных молчок. Железка точно работает, на ноги стм тыкаю авку и она успешно коннектится к эбу. Трансивер стшный 9637

в ответ на бит банг эбу должен отвечать 55 E9 8F , но приходит FF FF, полагаю что битбанг успешно отрабатывает, проблема в приеме

возможно чтото с частотами напутал, мож тут косяк подскажите
Код
void SetSysClockTo72(void)
{
  /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration -----------------------*/
  /* RCC system reset(for debug purpose) */
  RCC_DeInit();

  /* Enable HSE */
  RCC_HSEConfig(RCC_HSE_ON);

  /* Wait till HSE is ready */
  if (RCC_WaitForHSEStartUp() == SUCCESS)
  {

    FLASH_SetLatency(FLASH_Latency_2);
    RCC_HCLKConfig(RCC_SYSCLK_Div1);
    RCC_PCLK2Config(RCC_HCLK_Div1);
    RCC_PCLK1Config(RCC_HCLK_Div2);

    RCC_PREDIV1Config(RCC_PREDIV1_Source_HSE, RCC_PREDIV1_Div1);
    RCC_PLLConfig(RCC_PLLSource_PREDIV1, RCC_PLLMul_9);

    RCC_PLLCmd(ENABLE);

    while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
    {
    }

    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

    while (RCC_GetSYSCLKSource() != 0x08)
    {
    }


Сообщение отредактировал aneox - May 14 2015, 17:30
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
kolobok0
сообщение May 14 2015, 18:46
Сообщение #2


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(aneox @ May 14 2015, 20:46) *
Для начала диалога...


Понимаете Вы наверное ждёте, что тут все шли именно той дорогой что идёте Вы. Что все работали с эбу, или на худой
случай в мозгах сейчас сэмулируют и проверят все временные задержки, настройки и прочие закоулки?

Отчасти это так конечно же...
Но вот, что тяжело тупо стэп бай стэп локализовать траблу?

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

Лично мне так и не стало понятно после нескольких раз прочтения
Проблема в чём? В переключении в режим юарта или прерывание не пробегает или не получается проинициализировать порты мк???

Вы спокойно выдохните воздух, возьмите на вооружение мысль что барабашки сейчас пошли спать и им стало лениво лично Вам гадить,
что про страшные закладки от буржуев знают только "спецы" на первом канале...
А всё остальное у большинства(ну если нет следа от хая в гугле какого нить косяка по теме у СТМа) радиолюбителей прекрасно(!) работает...
Посему просто тупо Ваш глаз замылился и не охватывает всего сразу - отсюда и блокируются ваш мозх sm.gif

Разбейте задачу на составные и поверьте - косяк тут-же испугается вашего тотального наступления sm.gif
такими историями нормальный радиолюбитель может тоннами заваливать внучков под старость sm.gif

Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- aneox   stm32 uart kline 5baud slow init   May 14 2015, 17:46
- - aneox   Спасибо за ответ) Просто опыта не хватает, первый ...   May 14 2015, 18:54
|- - kolobok0   Цитата(aneox @ May 14 2015, 21:54) ...Спа...   May 14 2015, 19:30
- - aneox   так, ну проблема всетаки есть. обясню чтобы получ...   May 14 2015, 21:40
- - mr_smit   Авто какое?   May 15 2015, 03:57
|- - aneox   Цитата(mr_smit @ May 15 2015, 04:57) Авто...   May 15 2015, 04:11
- - mr_smit   В обработчике прерывания от USART надо сбрасывать ...   May 15 2015, 04:20
- - aneox   спасибо, но на сколько я знаю, считывания байта из...   May 15 2015, 04:31
- - mr_smit   Да, подзабыл. ЦитатаRXNE - This bit is set by hard...   May 15 2015, 05:34
- - aneox   отправку из прерывания убрал еще вчера, сегодня во...   May 15 2015, 07:55
- - Golikov A.   Цитатаи уже в прерывание уарт не входит что значит...   May 15 2015, 09:19
|- - mr_smit   Цитата(Golikov A. @ May 15 2015, 13:19) ч...   May 15 2015, 10:34
|- - aneox   Цитата(Golikov A. @ May 15 2015, 10:19) ч...   May 15 2015, 12:07
|- - mr_smit   Цитата(aneox @ May 15 2015, 16:07) mr_smi...   May 15 2015, 12:53
- - Rash   есть ещё и другая особенность, при вкл. зажигания ...   May 15 2015, 10:44
- - Golikov A.   а ну все правильно написано, все должно работать))...   May 15 2015, 12:40
- - Golikov A.   проверяйте функции DeInit она там тактирование слу...   May 15 2015, 12:57


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 05:05
Рейтинг@Mail.ru


Страница сгенерированна за 0.01417 секунд с 7
ELECTRONIX ©2004-2016