Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 07.01.2015, 01:06  
Sl_
Частый гость
 
Регистрация: 08.05.2011
Сообщений: 25
Сказал спасибо: 12
Сказали Спасибо 7 раз(а) в 4 сообщении(ях)
Sl_ на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Можно повторить вопрос?

Посоветуйте какой JTAG на данный момент лучший.
Хочется что бы не только SWD был.
В первую очередь буду использовать для STM32F......
Необходима стыковка с IAR.
Цена тоже важна. Но вторична.
Ну и где можно купить в Москве.
Реклама:
Sl_ вне форума  
Непрочитано 07.01.2015, 07:12  
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Лучший - это в позолоченном корпусе что ли? Или которым больше хомячков пользуется
Жытаг или работает как все, или не работает, потому что не поддерживается

Посмотри на сайте ИАР какие он поддерживает
niXto вне форума  
Непрочитано 16.01.2015, 22:44  
С.М.С
Гражданин KAZUS.RU
 
Аватар для С.М.С
 
Регистрация: 03.07.2010
Сообщений: 843
Сказал спасибо: 156
Сказали Спасибо 378 раз(а) в 190 сообщении(ях)
С.М.С на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Доброго времени! Есть процедура обмена данными МК с датчиком температуры LM75A, которая бывает зависает, скорее всего из-за длины кабеля.

Код:
// Read 16-bit LM75 register
	uint16_t LM75_ReadReg(uint8_t reg) 
	{
		uint16_t value;
	
		I2C_AcknowledgeConfig(I2C_PORT,ENABLE); // Enable I2C acknowledgment
		I2C_GenerateSTART(I2C_PORT,ENABLE);
		while (!I2C_CheckEvent(I2C_PORT,I2C_EVENT_MASTER_MODE_SE  LECT)); // Wait for EV5
		I2C_Send7bitAddress(I2C_PORT,LM75_ADDR,I2C_Directi  on_Transmitter); // Send slave address
		while (!I2C_CheckEvent(I2C_PORT,I2C_EVENT_MASTER_TRANSMI  TTER_MODE_SELECTED)); // Wait for EV6
		I2C_SendData(I2C_PORT,reg); // Send register address
		while (!I2C_CheckEvent(I2C_PORT,I2C_EVENT_MASTER_BYTE_TR  ANSMITTED)); // Wait for EV8
		I2C_GenerateSTART(I2C_PORT,ENABLE); // Send repeated START condition (aka Re-START)
		while (!I2C_CheckEvent(I2C_PORT,I2C_EVENT_MASTER_MODE_SE  LECT)); // Wait for EV5
		I2C_Send7bitAddress(I2C_PORT,LM75_ADDR,I2C_Directi  on_Receiver); // Send slave address for READ
		while (!I2C_CheckEvent(I2C_PORT,I2C_EVENT_MASTER_RECEIVE  R_MODE_SELECTED)); // Wait for EV6
		while (!I2C_CheckEvent(I2C_PORT,I2C_EVENT_MASTER_BYTE_RE  CEIVED)); // Wait for EV7 (Byte received from slave)
		value = (I2C_ReceiveData(I2C_PORT) ‹‹ 8); // Receive high byte
		I2C_AcknowledgeConfig(I2C_PORT,DISABLE); // Disable I2C acknowledgment
		I2C_GenerateSTOP(I2C_PORT,ENABLE); // Send STOP condition
		while (!I2C_CheckEvent(I2C_PORT,I2C_EVENT_MASTER_BYTE_RE  CEIVED)); // Wait for EV7 (Byte received from slave)
		value |= I2C_ReceiveData(I2C_PORT); // Receive low byte
	
		return value;
	}
Но суть вопроса не в этом. watchdog использовать не хочу, так как процедуры длинные а везде тыкать обновление счётчика не хочется, поэтому планирую перед вызовом процедуры обмена с термометром, запустить таймер, если МК зависнет в процедуре и на выходе не остановит таймер, произойдёт прерывание в котором планирую либо сделать reset, либо передать управление в главную процедуру. Собственно вопрос в том, как программно сделать reset для stm32f10... или принудительно завершить процедуру в которой произошло прерывание?


ресет вроде нашёл, можно сделать NVIC_SystemReset(); а вот с принудительным завершением какой-либо процедуры, чтобы обойтись без сброса?

Последний раз редактировалось С.М.С; 16.01.2015 в 23:45.
С.М.С вне форума  
Непрочитано 17.01.2015, 00:25  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Ну так напишите функцию ожидания с таймаутом - замените ею Ваши while ы, на которых все зависает.
Boba_spb вне форума  
Сказали "Спасибо" Boba_spb
С.М.С (23.01.2015)
Непрочитано 17.01.2015, 00:39  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

С.М.С, ловите
Код:
unsigned char I2c_Read_Page (I2C_TypeDef* I2Cx, unsigned char I2c_Address, unsigned char Reg, 
																									unsigned char * buffer, unsigned char Len)
{
	I2c_ACK(I2Cx);
	if (I2c_Start(I2Cx)) return I2C_BUS_BUSY;
	if (I2c_WriteAddress(I2Cx, I2c_Address)) return I2C_NOACK; 
	I2c_WriteByte(I2Cx, Reg);
	I2c_ReStart(I2Cx);
	I2c_WriteAddress(I2Cx, I2c_Address|1);	
	while (Len›1)
	{		
		I2c_ACK(I2Cx);
		* buffer++ = I2c_ReadByte(I2Cx);
		Len--;
	}
	I2c_NACK(I2Cx);
	I2c_Stop(I2Cx);
	* buffer++ = I2c_ReadByte(I2Cx);	
	return I2C_OK;
}
Код:
unsigned char I2c_Start (I2C_TypeDef* I2Cx)
{
	u16 cnt = maxcnt;
	if (I2Cx-›SR2&I2C_SR2_BUSY) return I2C_BUS_BUSY;
	I2Cx-›CR1 |= I2C_CR1_START;
	while ((I2Cx-›SR1 & I2C_SR1_SB) == 0)
	{
		cnt--;
		if (cnt == 0) return I2C_BUS_BUSY;
	}
	return 0;
}

void I2c_ReStart (I2C_TypeDef* I2Cx)
{
	I2Cx-›CR1 |= I2C_CR1_START;
	while (!(I2Cx-›SR1 & I2C_SR1_SB));
}

unsigned char I2c_WriteAddress (I2C_TypeDef* I2Cx, unsigned char i2c_address)
{
	u16 cnt = maxcnt;
	I2Cx-›DR = i2c_address;
	while (!(I2Cx-›SR1 & (I2C_SR1_ADDR|I2C_SR1_ARLO|I2C_SR1_AF)))//stuck here sometimes
	{
		cnt--;
		if (cnt == 0) return I2C_NOACK;
	}
	if (I2Cx-›SR1&(I2C_SR1_ARLO|I2C_SR1_AF)) return I2C_NOACK;
	(void) I2Cx-›SR1;
	(void) I2Cx-›SR2;
	if (i2c_address&1) while (!(I2Cx-›SR1 & I2C_SR1_RXNE));
	return 0;
}

void I2c_WriteByte (I2C_TypeDef* I2Cx, unsigned char data)
{
	I2Cx-›DR = data;
	while (!(I2Cx-›SR1 & I2C_SR1_BTF));
}

unsigned char I2c_ReadByte (I2C_TypeDef* I2Cx)
{
	while((I2Cx-›SR1 & I2C_SR1_RXNE)==0);   // wait data
	I2Cx-›SR1;
  I2Cx-›SR2;
	return I2Cx-›DR;
}

unsigned char I2c_Stop (I2C_TypeDef* I2Cx)
{	
	I2Cx-›CR1 |= I2C_CR1_STOP;
	while (I2Cx-›SR2&I2C_SR2_BUSY);
	return I2C_OK;
}

void I2c_ACK (I2C_TypeDef* I2Cx)
{
	I2Cx-›CR1 |= I2C_CR1_ACK;
}

void I2c_NACK (I2C_TypeDef* I2Cx)
{
	I2Cx-›CR1 &= ~I2C_CR1_ACK;
}
Easyrider83 вне форума  
Сказали "Спасибо" Easyrider83
С.М.С (17.01.2015)
Непрочитано 17.01.2015, 11:59  
С.М.С
Гражданин KAZUS.RU
 
Аватар для С.М.С
 
Регистрация: 03.07.2010
Сообщений: 843
Сказал спасибо: 156
Сказали Спасибо 378 раз(а) в 190 сообщении(ях)
С.М.С на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Благодарю, но вопрос не в самой процедуре. На столе всё прекрасно работает, ставя в моторный отсек, где куча помех, бывает, зависает в одном из циклов. timeout_ы тоже не помогут, потому, как смысл проходить все операторы если уже есть потеря данных. Кабель, взял старый USB, длина метра полтора, на обычном практически не хотело работать. Можно конечно прикрутить преобразователь уровней, но пока пробую обойтись программно.

Последний раз редактировалось С.М.С; 17.01.2015 в 12:16.
С.М.С вне форума  
Непрочитано 17.01.2015, 12:40  
blogin
Прописка
 
Регистрация: 21.12.2007
Адрес: Киев
Сообщений: 123
Сказал спасибо: 10
Сказали Спасибо 62 раз(а) в 41 сообщении(ях)
blogin на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

В случае успеха отошлите заявку на премию от филипса,за то что смогли сделать и2с больше 40см в условиях помех от мотора
blogin вне форума  
Непрочитано 17.01.2015, 13:12  
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Цитата:
пока пробую обойтись программно
Программно? Ну-ну! 95-98% безотказности обеспечивает железо!
Цитата:
ставя в моторный отсек, где куча помех, бывает, зависает в одном из циклов. timeout_ы тоже не помогут
Без железной защиты не помогут. А вообще, это нормальная практика. Все циклы проверки должны иметь таймаут, потому что они имеет потенциальную возможность в любой момент времени стать вечными. Для настольных свестелок-перделок кружка пионеров можно и без таймаута, для остальных девайсов это неприемлемо. Кому понравится вечно зависающий или постоянно пересбрасываемый девайс?
STM32F0 вне форума  
Сказали "Спасибо" STM32F0
С.М.С (23.01.2015)
Непрочитано 17.01.2015, 14:09  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от С.М.С Посмотреть сообщение
timeout_ы тоже не помогут, потому, как смысл проходить все операторы если уже есть потеря данных.
А кто Вас заставляет проходит все операторы.
Поймали тайматут - установили СТОП и возвращаете ошибку. Ну а далее то уж вам решать что по ошибке делать. Вы не обращали внимания, что все функции возвращают ошибку или генерят исключения
Boba_spb вне форума  
Сказали "Спасибо" Boba_spb
С.М.С (23.01.2015)
Непрочитано 23.01.2015, 17:08  
С.М.С
Гражданин KAZUS.RU
 
Аватар для С.М.С
 
Регистрация: 03.07.2010
Сообщений: 843
Сказал спасибо: 156
Сказали Спасибо 378 раз(а) в 190 сообщении(ях)
С.М.С на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Вопрос вроде разрешился, надо погонять дольше.
Код:
if (i ›= 1000) goto LM75_ReadReg_Start; else i++;
Благодарю за пинки в нужном направлении.

Кстати просматривал библиотеку для RTC и там в примерах

Код:
/**
  * @brief  Displays the current time.
  * @param  TimeVar: RTC counter value.
  * @retval None
  */
void Time_Display(uint32_t TimeVar)
{
  uint32_t THH = 0, TMM = 0, TSS = 0;
  
  /* Reset RTC Counter when Time is 23:59:59 */
  if (RTC_GetCounter() == 0x0001517F)
  {
     RTC_SetCounter(0x0);
     /* Wait until last write operation on RTC registers has finished */
     RTC_WaitForLastTask();
  }
  
  /* Compute  hours */
  THH = TimeVar / 3600;
  /* Compute minutes */
  TMM = (TimeVar % 3600) / 60;
  /* Compute seconds */
  TSS = (TimeVar % 3600) % 60;

  printf("Time: %0.2d:%0.2d:%0.2d\r", THH, TMM, TSS);
}
Сброс счётчика происходит раз в сутки, т.е через 86400 секунд, но это когда запитан основной домен питания. В случая же если МК отключен, запитывается только Vbat для резервного домена, счётчик протикает 86400 импульсов и при следующем запуске не попадёт под условие сброса. if (RTC_GetCounter() == 0x0001517F) В результате на табло появятся значения за 24 часа либо если есть условия корректности вылетит в обработчик ошибки.

Последний раз редактировалось С.М.С; 23.01.2015 в 17:11.
С.М.С вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Школа АRMрестлинга Uragan90 Микроконтроллеры, АЦП, память и т.д 54 22.08.2011 16:13
ARM Cortex M3 + Linux SiMiLya Микроконтроллеры, АЦП, память и т.д 10 17.06.2011 17:20
Помогите с STM32 - очень нужно... yakuzaa Микроконтроллеры, АЦП, память и т.д 60 04.08.2010 11:04
Как добавить поддержку для STM32 SFHK Микроконтроллеры, АЦП, память и т.д 11 18.12.2009 18:09


Часовой пояс GMT +4, время: 15:18.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot