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

 
 
> 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
Ответов
aneox
сообщение May 14 2015, 18:54
Сообщение #2


Участник
*

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



Спасибо за ответ) Просто опыта не хватает, первый раз со 105м работаю, он хотел кварц 25мгц а у мну 8, получилось что проц работал 115мгц и уарт глючил. Добавил дефайн "HSE_VALUE=8000000" и все заработало на 72мгц, сразу чето не дошло, старый код от 103 взял и все. Спасибо за внимание blush.gif
Go to the top of the page
 
+Quote Post
kolobok0
сообщение May 14 2015, 19:30
Сообщение #3


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

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



Цитата(aneox @ May 14 2015, 21:54) *
...Спасибо за внимание...


бывает sm.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- aneox   stm32 uart kline 5baud slow init   May 14 2015, 17:46
- - kolobok0   Цитата(aneox @ May 14 2015, 20:46) Для на...   May 14 2015, 18:46
- - 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 Текстовая версия Сейчас: 18th July 2025 - 16:01
Рейтинг@Mail.ru


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