Перейти к содержанию
    

STM32 – вопросы – проблемы - решения.

DfuSe на 217 не испытывал, нужды не было пока. Но во-первых у f2xx и f105/f107 одинаковый модуль USB OTG FS (сам использую библиотеки от connectivity line для F217) а во-вторых описание DFU общее на всех. Так что не вижу препятствий.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Какие еще программы существуют для прошивки стандартным бутлоадером кроме Flash Loader Demonstrator? Им прошить не получается - говорит то устройства нет, то что не попал в секцию первичного загрузчика, то команда неизвестная. На разные комбинации бута0 и ресета реагирует по-разному (т.е. контроллер живой), повторяемость 100%. В идеале хотелось бы посмотреть логи попыток прошивки (может быть вариант в непропае ножек).

 

МК - stm32f100

Может кто из старших видео снимал когда-либо. или схемками может поделиться - буду очень признателен!!!

 

Вот моя схемка. На ней перепутаны rx и tx между переходником и контроллером. но на практике собрал правильно.

___.bmp

Изменено пользователем wedmeed

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Какие еще программы существуют для прошивки стандартным бутлоадером кроме Flash Loader Demonstrator?

 

Думаю, другая программа Вам не поможет, проблема явно не в ней. Советую осциллографом поработать и посмотреть, что там у Вас на линиях твориться, проверьте уровни, фронты обязательно. Если я правильно понял, MCP2200 у вас в качестве виртуального COM порта, если через него данные пытаетесь зашить, как раз он может быть источником проблемы. А схему лучше в jpg выкладывать.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Какие еще программы существуют для прошивки стандартным бутлоадером кроме Flash Loader Demonstrator? Им прошить не получается - говорит то устройства нет, то что не попал в секцию первичного загрузчика, то команда неизвестная. На разные комбинации бута0 и ресета реагирует по-разному (т.е. контроллер живой), повторяемость 100%. В идеале хотелось бы посмотреть логи попыток прошивки (может быть вариант в непропае ножек).

 

МК - stm32f100

Может кто из старших видео снимал когда-либо. или схемками может поделиться - буду очень признателен!!!

 

Вот моя схемка. На ней перепутаны rx и tx между переходником и контроллером. но на практике собрал правильно.

___.bmp

 

RX МК нужно подтянуть к +3В через сопротивление примерно 10к, должно заработать.

И еще там есть исходники Flash Loader Demonstrator для работы с bootloader ,можно самому дописать что надо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На выходных набрел на статью в эйзиэлектроникс про прошивку как раз моего чипа. Их рекомендации не помогли, но там была ссылка на програмку termit. Попробовал с помощью неё поговорить с контроллером - отвечает, причем на описанные в даташите комбинации - нормально. Про версию чипа прислал мне 0x1F1F. На комбинации, не описанные в даташите стабильно отвечает 0xFB, причем отвечает столько байт, сколько байт я ему и послал.

 

RX МК нужно подтянуть к +3В через сопротивление примерно 10к, должно заработать.

Спасибо, попробую.

И еще там есть исходники Flash Loader Demonstrator для работы с bootloader ,можно самому дописать что надо.

Насколько я понял - в исходниках только графическая оболочка, все остальное - в dll. Сам не смотрел, прочитал где-то на форумах. На досуге покопаюсь.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Товарищи, здорова!

Кто-нибудь работал на стм32ф107?

Затык с прерываниями!!

Не могу настроить прерывания от SPI и UART. Ну SPI ладно, выкрутился без прерываний, на уарт никак!!

Главное от таймера2 работает прерывание по обнулению!

 

Проблема:

инициализирую клок для проца и всего остального:

  RCC_HSEConfig(RCC_HSE_ON);  
  RCC_WaitForHSEStartUp();
  
  RCC_HCLKConfig(RCC_SYSCLK_Div1);
  RCC_PLLConfig(RCC_PREDIV1_Source_HSE,RCC_PLLMul_4);
  RCC_PCLK1Config(RCC_HCLK_Div1);
  RCC_PCLK2Config(RCC_HCLK_Div1); 
  
  RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
  RCC_PLLCmd(ENABLE);
   
  //ïîäàåì òàêòîâûé ñèãíàë íà ïîðòû 
  //RCC_AHBPeriphClockCmd ( );  
  
  RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO, ENABLE); 
  
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);  
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
  
  SystemInit();

 

Далее инициализация USART2:

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Pin =GPIO_Pin_2;
  GPIO_Init(GPIOA, &GPIO_InitStructure); 
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Pin =GPIO_Pin_3;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  
  NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
  
  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_Even;
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  USART_Init(USART2, &USART_InitStructure);  

  USART_ClearFlag(USART2,USART_FLAG_TC);  
  USART_ClearITPendingBit(USART2,USART_IT_TC); 
  
  USART_ITConfig(USART2, USART_IT_TC, ENABLE);

  USART_Cmd(USART2, ENABLE);

 

...и все. Здесь уже висит.

В программу прерывания не заходит:

void USART2_IRQHandler(void)
{
  if(USART_GetITStatus(USART2,USART_IT_RXNE)==SET)  
  {
    USART_ClearFlag(USART2,USART_FLAG_RXNE);    
    USART_ClearITPendingBit(USART2,USART_IT_RXNE);    

  }

  if(USART_GetITStatus(USART2,USART_IT_TC)==SET)   
  { 
    if (GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_8) == 1) GPIO_ResetBits(GPIOC,GPIO_Pin_8);
    else GPIO_SetBits(GPIOC,GPIO_Pin_8);
    
    USART_ClearFlag(USART2,USART_FLAG_TC);     
    USART_ClearITPendingBit(USART2,USART_IT_TC);
  }
}

 

Может чо-то где забыл поставить в заголовочных файлах?

Подскажите, если кто через такое проходил?

 

Главное, на 103-м такое прерывание работает!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Во! Только что на работе нашел осциллограф и нормальную програмку для UARTа. Пообщаться с бутлоадером получилось, но вот в чем беда:

для того, чтобы бутлоадер в МК понял команду, помимо идентификатора команды ему надо послать ее инверсию следующим байтом (01 - FE). Если посылать байты поочередно - все гуд. Если послать байты сразу - на первую попытку молчит, на вторую выдает ошибку. Получается он не успевает впоймать второй байт. Попробовал ставить 2 стоповых бита - не видит второй байт. Попробовал вставить между этими двумя байтами 0xFF - заработало! Картина стала такова: МК ловит первый байт, стартового бита второго байта не видит, дальше идут 1, которые МК воспринимает как молчание на линии, дальше ловит третий байт, считая его вторым.

 

Вопрос - почему МК не воспринимает нормально следующие сразу друг за другом байты?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Про версию чипа прислал мне 0x1F1F.

Вот эти два предложения противоречат друг другу. С одной стороны чип тот же, с другой - другой идентификатор.

1F1F выглядит странно. Попробуйте уменьшить скорость порта.

Изменено пользователем Oleg Galizin

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добрый день. У меня возникла следующая проблема, есть 2 программатора : внешний ST-LINK(рис.1) и универсальный J-link(рис.2) под ядра ARM.

 

St-Link-ом не получается прошить микроконтроллер stm32L152, а j-Link-ом шьется без проблем...при чем когда шью ST-link-ом, загрузка как бы начинается, но потом все виснет...

 

Может кто-нибудь сталкивался с этой проблемой...

Спасибо.

post-44543-1311000684_thumb.jpg

post-44543-1311000693_thumb.jpg

Изменено пользователем Twen

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все, нормально, починилось! :08:

Действительно, как писал кто-то выше, надо просто выспаться!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все, нормально, починилось! :08:

Вы бы поделились, в чём косяк был. А то такие куски кода выложили...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня проблема с компиляцией простейшей тестовой программки для STM32 Discovery под IAR-ом V6.2.

Код нормально компилился под 5.5, но после установки 6.2 ругается:

 

Error[Pe337]: linkage specification is incompatible with previous «__WFI»……и т.д.

 

Эта ошибка появляется для проекта С++, под С ошибки другого характера.

Помогите побороть пожалуйста! (может это как-то связано с CMSIS?)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Во! Только что на работе нашел осциллограф и нормальную програмку для UARTа. Пообщаться с бутлоадером получилось, но вот в чем беда:

для того, чтобы бутлоадер в МК понял команду, помимо идентификатора команды ему надо послать ее инверсию следующим байтом (01 - FE). Если посылать байты поочередно - все гуд. Если послать байты сразу - на первую попытку молчит, на вторую выдает ошибку. Получается он не успевает впоймать второй байт. Попробовал ставить 2 стоповых бита - не видит второй байт. Попробовал вставить между этими двумя байтами 0xFF - заработало! Картина стала такова: МК ловит первый байт, стартового бита второго байта не видит, дальше идут 1, которые МК воспринимает как молчание на линии, дальше ловит третий байт, считая его вторым.

 

Вопрос - почему МК не воспринимает нормально следующие сразу друг за другом байты?

parity какой? должен быть even, наскоко помню

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы бы поделились, в чём косяк был. А то такие куски кода выложили...

Решение оказалось очень простым:

1. Инициализацию не трогал.

2. Удалил из проекта stm32f10x_it.h и stm32f10x_it.c

И все заработало.

 

Видимо "процессор" обращался в эти файлы за подпрограммой обработки прерывания и не находил ее.

Следовательно, зависание.

 

Без них все работает просто отлично!

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну тогда уж наоборот - обращался и находил, но не ту которую вы ожидали (ваша обработка прерываний, видимо, в другом файле, так?). Сдается мне, что кто-то игнорирует ворнинги :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...