03.10.2011, 18:10
|
|
Частый гость
Регистрация: 11.05.2010
Сообщений: 10
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 2 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Dccharacter, контроллер прерываний является частью ядра Cortex-Mx и его описание логичнее искать в документации от ARMа. Есть такой документ DDI0337H_cortex_m3_r2p0_trm.pdf там и найдёте описание, целая глава посвящена. Любой арм на базе кортекса состоит как бы из двух частей собственно ядро, одинаковое для всех производителей и периферия которую разрабатывает каждый свою .Поэтому для освоения надо как минимум курить 3 документа сразу , описание ядра, референс мануал на линейку и даташит на конкретный камень .
|
|
|
|
03.10.2011, 18:21
|
|
Временная регистрация
Регистрация: 28.03.2010
Сообщений: 56
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Изучаем STM32 Cortex M3
Сообщение от FROG45
|
Dccharacter, контроллер прерываний является частью ядра Cortex-Mx и его описание логичнее искать в документации от ARMа. Есть такой документ DDI0337H_cortex_m3_r2p0_trm.pdf там и найдёте описание, целая глава посвящена. Любой арм на базе кортекса состоит как бы из двух частей собственно ядро, одинаковое для всех производителей и периферия которую разрабатывает каждый свою .Поэтому для освоения надо как минимум курить 3 документа сразу , описание ядра, референс мануал на линейку и даташит на конкретный камень .
|
4 страницы общей информации Смотрю документ Cortex M3 rev r2p0 Technical Reference Manual
|
|
|
|
03.10.2011, 18:41
|
|
Частый гость
Регистрация: 11.05.2010
Сообщений: 10
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 2 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
а что Вы хотите найти ? что в NVIC Вас интересует , в папке CMSIS , библиотеки стандартной периферии вроде все подробно расписано .
|
|
|
|
03.10.2011, 20:08
|
|
Прописка
Регистрация: 08.10.2009
Сообщений: 101
Сказал спасибо: 2
Сказали Спасибо 11 раз(а) в 10 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Подскажите как ст-link тот , тот что на дискавери , обновить до версии 2 . скачал утилиту он не видит его.
|
|
|
|
03.10.2011, 20:56
|
|
Частый гость
Регистрация: 11.05.2010
Сообщений: 10
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 2 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
на плате дискавери линк стоит первый , до второго Вы его вряд ли сумеете обновить . закладка Target connect должен подключиться , апгрейд прошивки закладка st link firmware update обновляет до версии v1.J12.S0, тока что свой пробовал всё работает.
|
|
|
|
03.10.2011, 21:37
|
|
Временная регистрация
Регистрация: 28.03.2010
Сообщений: 56
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Изучаем STM32 Cortex M3
Сообщение от FROG45
|
а что Вы хотите найти ? что в NVIC Вас интересует , в папке CMSIS , библиотеки стандартной периферии вроде все подробно расписано .
|
Ну вот, например, пытаюсь понять разницу между interrupt flag и pending bit. Есть две пары функций:
TIM_GetITStatus — TIM_ClearITPendingBit
и
TIM_GetFlagStatus — TIM_ClearFlag
Например мой код (переключение светодиода по переполнению таймера) работает с использованием любой из пар. Логичного объяснения нигде не нашел. Более того, в программинг мануале написано, что флаги опускаются автоматом при переходе в хендлер, но на самом деле этого не происходит...
|
|
|
|
03.10.2011, 21:44
|
|
Прописка
Регистрация: 08.10.2009
Сообщений: 101
Сказал спасибо: 2
Сказали Спасибо 11 раз(а) в 10 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от FROG45
|
на плате дискавери линк стоит первый , до второго Вы его вряд ли сумеете обновить . закладка Target connect должен подключиться , апгрейд прошивки закладка st link firmware update обновляет до версии v1.J12.S0, тока что свой пробовал всё работает.
|
В том то и дело , что у меня новый кеил а в нем драйвера st_link V2 и первый он не видит в упор .
st link firmware update от первого видит мою дискавери и обновляет до v1.J12.S0, а от второго не видит и соответственно до v2 не обновлят .
А как обновить V1 до v2 так и не пойму
|
|
|
|
03.10.2011, 22:30
|
|
Частый гость
Регистрация: 11.05.2010
Сообщений: 10
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 2 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
сейчас проверил со своей платой , всё видит , кейл 4.22 новее некуда , компилирует, заливает прошивку , по шагам ходит весь функционал доступен. Плата MB913C00/ Проверьте настройки может у Вас житаг стоит вместо swd это в опциях дебаг настройки там два выбора житаг и swd должен стоять swd . До 2 линка стандартными средствами Вы не сможете обновить .
По прерываниям постараюсь завтра выложить справочный материал , ща на работе лежит.
|
|
|
|
03.10.2011, 22:51
|
|
Заблокирован
Регистрация: 26.12.2009
Сообщений: 3,124
Сказал спасибо: 116
Сказали Спасибо 867 раз(а) в 614 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от FROG45
|
кейл 4.22 новее некуда
|
Последний - 4.22а...
|
|
|
|
04.10.2011, 10:00
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Ну вот и я решил поработать с I2c на STM32.
Для экспериментов была выбрана память 24C64. Плата STM Discovery и панелька в DIP корпусе находятся в макетной плате. Проблемы с флюсами и пайками исключены.
Почитав тему был не много опечален ситуацией, но все же решил накатать код.
Итак, инициализация без особых вопросов:
Код:
|
void EE24Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
I2C_InitTypeDef I2C_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE) ;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_OD;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStruct);
I2C_DeInit(I2C1);
I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
I2C_InitStructure.I2C_OwnAddress1 = 0;
I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
I2C_InitStructure.I2C_ClockSpeed = 100000; /* 100kHz */
I2C_Cmd(I2C1, ENABLE);
I2C_Init(I2C1, &I2C_InitStructure);
I2C_AcknowledgeConfig(I2C1, ENABLE);
} |
Далее сам код:
Код:
|
int EE24ReadWrite(I2C_TypeDef* I2Cx, char val, int WriteAddr)
{
if(I2C_GetFlagStatus(I2Cx, I2C_FLAG_BUSY)){return I2C_BUS_BUSY;} /* While the bus is busy */
I2C_GenerateSTART(I2Cx, ENABLE); /* Send START condition */
if(I2C_Wait_Event(I2Cx,I2C_EVENT_MASTER_MODE_SELEC T)){return I2C_ERROR;} /* Test on EV5 and clear it */
I2C_Send7bitAddress(I2Cx, EEPROM_HW_ADDRESS, I2C_Direction_Transmitter); /* Send EEPROM address for write */
if(I2C_Wait_Event(I2Cx,I2C_EVENT_MASTER_TRANSMITTE R_MODE_SELECTED)) /* Test on EV6 and clear it */
{return I2C_ERROR;}
I2C_SendData(I2Cx, (char)((WriteAddr & 0xFF00) ›› 8)); /* Send the EEPROM's internal address to write to : MSB of the address first */
if(I2C_Wait_Event(I2Cx,I2C_EVENT_MASTER_BYTE_TRANS MITTED)){return I2C_ERROR;} /* Test on EV8 and clear it */
I2C_SendData(I2Cx, (char)(WriteAddr & 0x00FF)); /* Send the EEPROM's internal address to write to : LSB of the address */
if(I2C_Wait_Event(I2Cx,I2C_EVENT_MASTER_BYTE_TRANS MITTED)){return I2C_ERROR;} /* Test on EV8 and clear it */
I2C_SendData(I2Cx, val);
if(I2C_Wait_Event(I2Cx,I2C_EVENT_MASTER_BYTE_TRANS MITTED)){return I2C_ERROR;} /* Test on EV8 and clear it */
I2C_GenerateSTOP(I2Cx, ENABLE); /* Send STOP condition */ //delay between write and read...not less 4ms
return 0;
} |
Здесь все просто за исключением того, что от использования бесконечного ожидания я сразу отказался и завел такую функцию:
Код:
|
char I2C_Wait_Event(I2C_TypeDef* I2Cx, long event)
{
long tmr = 0;
long err = 0xFF;
while ((tmr!=Max_I2C_delay_cls)&(err))
{
tmr++;
err=!I2C_CheckEvent(I2Cx, event);
}
if (tmr==Max_I2C_delay_cls)
{
led_flash(BLUE_LED);
return 1; //ERROR
}
else
{return 0;} //OK
} |
Ну здесь все понятно. Если шина молчит примерно пол секунды, моргнуть диодом и завершить операцию. Как бы код рабочий. Операция чтения проходит замечательно - информация считывается. Но при повторном запросе шина зависает. Причины этого зависания меня и интересуют. И зачем читается второй байт? Операция чтения используется только один раз.
Хочется написать работу с 24ххх только на прерываниях, но с такими проблемами мне туда пока рано.
Последний раз редактировалось Easyrider83; 04.10.2011 в 10:20.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 06:26.
|
|