|
|
  |
STM32 – вопросы – проблемы - решения. |
|
|
|
Jul 14 2011, 21:58
|

Частый гость
 
Группа: Свой
Сообщений: 107
Регистрация: 5-04-11
Из: г.Саратов
Пользователь №: 64 137

|
Какие еще программы существуют для прошивки стандартным бутлоадером кроме Flash Loader Demonstrator? Им прошить не получается - говорит то устройства нет, то что не попал в секцию первичного загрузчика, то команда неизвестная. На разные комбинации бута0 и ресета реагирует по-разному (т.е. контроллер живой), повторяемость 100%. В идеале хотелось бы посмотреть логи попыток прошивки (может быть вариант в непропае ножек). МК - stm32f100 Может кто из старших видео снимал когда-либо. или схемками может поделиться - буду очень признателен!!! Вот моя схемка. На ней перепутаны rx и tx между переходником и контроллером. но на практике собрал правильно.
___.bmp ( 2.85 мегабайт )
Кол-во скачиваний: 31
Сообщение отредактировал wedmeed - Jul 15 2011, 06:41
|
|
|
|
|
Jul 15 2011, 17:01
|

Twilight Zone
  
Группа: Свой
Сообщений: 454
Регистрация: 17-02-09
Из: Челябинск
Пользователь №: 44 990

|
Цитата(wedmeed @ Jul 15 2011, 01:58)  Какие еще программы существуют для прошивки стандартным бутлоадером кроме Flash Loader Demonstrator? Думаю, другая программа Вам не поможет, проблема явно не в ней. Советую осциллографом поработать и посмотреть, что там у Вас на линиях твориться, проверьте уровни, фронты обязательно. Если я правильно понял, MCP2200 у вас в качестве виртуального COM порта, если через него данные пытаетесь зашить, как раз он может быть источником проблемы. А схему лучше в jpg выкладывать.
--------------------
Magic Friend
|
|
|
|
|
Jul 17 2011, 02:02
|
Группа: Новичок
Сообщений: 2
Регистрация: 7-12-07
Из: Братск
Пользователь №: 33 051

|
Цитата(wedmeed @ Jul 15 2011, 06:58)  Какие еще программы существуют для прошивки стандартным бутлоадером кроме Flash Loader Demonstrator? Им прошить не получается - говорит то устройства нет, то что не попал в секцию первичного загрузчика, то команда неизвестная. На разные комбинации бута0 и ресета реагирует по-разному (т.е. контроллер живой), повторяемость 100%. В идеале хотелось бы посмотреть логи попыток прошивки (может быть вариант в непропае ножек). МК - stm32f100 Может кто из старших видео снимал когда-либо. или схемками может поделиться - буду очень признателен!!! Вот моя схемка. На ней перепутаны rx и tx между переходником и контроллером. но на практике собрал правильно.
___.bmp ( 2.85 мегабайт )
Кол-во скачиваний: 31RX МК нужно подтянуть к +3В через сопротивление примерно 10к, должно заработать. И еще там есть исходники Flash Loader Demonstrator для работы с bootloader ,можно самому дописать что надо.
|
|
|
|
|
Jul 18 2011, 05:50
|

Частый гость
 
Группа: Свой
Сообщений: 107
Регистрация: 5-04-11
Из: г.Саратов
Пользователь №: 64 137

|
На выходных набрел на статью в эйзиэлектроникс про прошивку как раз моего чипа. Их рекомендации не помогли, но там была ссылка на програмку termit. Попробовал с помощью неё поговорить с контроллером - отвечает, причем на описанные в даташите комбинации - нормально. Про версию чипа прислал мне 0x1F1F. На комбинации, не описанные в даташите стабильно отвечает 0xFB, причем отвечает столько байт, сколько байт я ему и послал. Цитата(alekseyb @ Jul 17 2011, 06:02)  RX МК нужно подтянуть к +3В через сопротивление примерно 10к, должно заработать. Спасибо, попробую. Цитата(alekseyb @ Jul 17 2011, 06:02)  И еще там есть исходники Flash Loader Demonstrator для работы с bootloader ,можно самому дописать что надо. Насколько я понял - в исходниках только графическая оболочка, все остальное - в dll. Сам не смотрел, прочитал где-то на форумах. На досуге покопаюсь.
|
|
|
|
|
Jul 18 2011, 10:31
|
Группа: Участник
Сообщений: 11
Регистрация: 5-07-11
Пользователь №: 66 069

|
Товарищи, здорова! Кто-нибудь работал на стм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-м такое прерывание работает!!
|
|
|
|
|
Jul 18 2011, 12:32
|

Частый гость
 
Группа: Свой
Сообщений: 107
Регистрация: 5-04-11
Из: г.Саратов
Пользователь №: 64 137

|
Во! Только что на работе нашел осциллограф и нормальную програмку для UARTа. Пообщаться с бутлоадером получилось, но вот в чем беда: для того, чтобы бутлоадер в МК понял команду, помимо идентификатора команды ему надо послать ее инверсию следующим байтом (01 - FE). Если посылать байты поочередно - все гуд. Если послать байты сразу - на первую попытку молчит, на вторую выдает ошибку. Получается он не успевает впоймать второй байт. Попробовал ставить 2 стоповых бита - не видит второй байт. Попробовал вставить между этими двумя байтами 0xFF - заработало! Картина стала такова: МК ловит первый байт, стартового бита второго байта не видит, дальше идут 1, которые МК воспринимает как молчание на линии, дальше ловит третий байт, считая его вторым.
Вопрос - почему МК не воспринимает нормально следующие сразу друг за другом байты?
|
|
|
|
|
Jul 18 2011, 13:29
|
Группа: Участник
Сообщений: 14
Регистрация: 25-03-07
Пользователь №: 26 499

|
Цитата(wedmeed @ Jul 18 2011, 09:50)  На выходных набрел на статью в эйзиэлектроникс про прошивку как раз моего чипа. Про версию чипа прислал мне 0x1F1F. Вот эти два предложения противоречат друг другу. С одной стороны чип тот же, с другой - другой идентификатор. 1F1F выглядит странно. Попробуйте уменьшить скорость порта.
Сообщение отредактировал Oleg Galizin - Jul 18 2011, 13:32
|
|
|
|
|
Jul 18 2011, 14:50
|
Частый гость
 
Группа: Участник
Сообщений: 163
Регистрация: 7-02-09
Пользователь №: 44 543

|
Добрый день. У меня возникла следующая проблема, есть 2 программатора : внешний ST-LINK(рис.1) и универсальный J-link(рис.2) под ядра ARM. St-Link-ом не получается прошить микроконтроллер stm32L152, а j-Link-ом шьется без проблем...при чем когда шью ST-link-ом, загрузка как бы начинается, но потом все виснет... Может кто-нибудь сталкивался с этой проблемой... Спасибо.
Сообщение отредактировал Twen - Jul 18 2011, 14:52
Эскизы прикрепленных изображений
|
|
|
|
|
Jul 19 2011, 03:05
|
Группа: Участник
Сообщений: 11
Регистрация: 5-07-11
Пользователь №: 66 069

|
Все, нормально, починилось! Действительно, как писал кто-то выше, надо просто выспаться!
|
|
|
|
|
Jul 20 2011, 03:15
|

Знающий
   
Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467

|
Цитата(wedmeed @ Jul 18 2011, 08:32)  Во! Только что на работе нашел осциллограф и нормальную програмку для UARTа. Пообщаться с бутлоадером получилось, но вот в чем беда: для того, чтобы бутлоадер в МК понял команду, помимо идентификатора команды ему надо послать ее инверсию следующим байтом (01 - FE). Если посылать байты поочередно - все гуд. Если послать байты сразу - на первую попытку молчит, на вторую выдает ошибку. Получается он не успевает впоймать второй байт. Попробовал ставить 2 стоповых бита - не видит второй байт. Попробовал вставить между этими двумя байтами 0xFF - заработало! Картина стала такова: МК ловит первый байт, стартового бита второго байта не видит, дальше идут 1, которые МК воспринимает как молчание на линии, дальше ловит третий байт, считая его вторым.
Вопрос - почему МК не воспринимает нормально следующие сразу друг за другом байты? parity какой? должен быть even, наскоко помню
--------------------
Верить нельзя никому, даже себе. Мне - можно.
|
|
|
|
|
Jul 20 2011, 05:17
|
Группа: Участник
Сообщений: 11
Регистрация: 5-07-11
Пользователь №: 66 069

|
Цитата Вы бы поделились, в чём косяк был. А то такие куски кода выложили... Решение оказалось очень простым: 1. Инициализацию не трогал. 2. Удалил из проекта stm32f10x_it.h и stm32f10x_it.c И все заработало. Видимо "процессор" обращался в эти файлы за подпрограммой обработки прерывания и не находил ее. Следовательно, зависание. Без них все работает просто отлично!
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|