26.08.2011, 10:00
|
|
Временная регистрация
Регистрация: 06.05.2007
Сообщений: 75
Сказал спасибо: 18
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Какой Ethernet-трансивера физического уровня (PHY) лучше подключить с STM32F107 (доставабельный)? Нужен ли обязательно в нем МАС-процессор?
Присматриваюсь к RTL8201BL, но говорят в нем есть глюки или KSZ8041NL. А так же нужен CAN1 - тогда нужен трансивер с RMII?
+ RTL8201DL/EL c RMII, но их нет в продаже.
+ DP83848C
Последний раз редактировалось MikhailSh; 26.08.2011 в 13:30.
|
|
|
|
26.08.2011, 21:39
|
|
Частый гость
Регистрация: 20.03.2010
Сообщений: 27
Сказал спасибо: 10
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от uk8amk
|
Все товарищи, разобрался! Код полностью нормальный, это лыжи не едут, точнее дебуггер в кейле(4.12) ведет себя странно и некорректно. Стоило открыть окно Memory, вбить туда базовый адрес буфера SRAM и расширить его на весь экран(чтобы весь массив был виден), как по бряку все ячейки загрузились верными значениями. После этого вкладка Watch тоже начала отображать корректную информацию. Вот такой неожиданный косяк.
Это полный учебный проект.
|
Ета, как-то он таво, не работает у меня Ваш проект...
В ватче тишина да и вообще странный такой проектик...
Сообщение от tanq
|
Питание - это питание. А для запуска надо еще раз ADON после всех инициализаций.
|
В CR2? И где про это написано? То есть вы в один регистр в одно и то же место единички два раза ставите?
|
|
|
|
27.08.2011, 10:46
|
|
Гражданин KAZUS.RU
Регистрация: 12.10.2009
Сообщений: 576
Сказал спасибо: 30
Сказали Спасибо 138 раз(а) в 110 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от ‹smbd›
|
В CR2? И где про это написано?
|
В референс мануал написано. Второй раз ADON надо выставлять для софтового запуска АЦП. Если ацп запускается по какому-то событию, то не надо.
|
|
|
|
27.08.2011, 10:55
|
|
Вид на жительство
Регистрация: 05.07.2006
Адрес: Tashkent
Сообщений: 454
Сказал спасибо: 24
Сказали Спасибо 67 раз(а) в 44 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
››В CR2? И где про это написано?
Стр.175 RM0041
If this bit holds a value of zero and a 1 is written to it then it wakes up the ADC from Power Down state.
Conversion starts when this bit holds a value of 1 and a 1 is written to it.
››В ватче тишина да и вообще странный такой проектик...
Вас смущает то, что я не использую жирные стандартные библиотеки, а делаю все руками?
Сейчас скачал, запустил, все работает. На всякий случай аналоговый вход = PC0.
|
|
|
|
27.08.2011, 14:59
|
|
Временная регистрация
Регистрация: 09.02.2007
Сообщений: 91
Сказал спасибо: 0
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Подключил расширитель I2C PCF8575 по схеме во вложении.
Коды кнопок считываются нормально, НО ! Принажатии на кнопку K16 шина I2C код кнопки отдает, а потом виснет после выдачи следующего I2C_GenerateSTART (когда отпускаем кнопку).
Фрагменты кода:
Код:
|
while (1)
{
//сигнал INT на PB0
if (PCF8575_INT==0) //если на INT0 присутствует 0 - надо читать данные
{
key=GetKeyCode();;
//на экран
y-=15;
if (y‹=16)
{
y=190;
LCD_FillRect(10,10,80,180,RGB(10,140,10));
}
sprintf(Buf,"Key: %05X",key);
LCD_Text(10,y,Buf);
}
}
unsigned int GetKeyCode()
{
unsigned char p0,p1;
uint32_t cod;
// Send STRAT condition
/* Generate a START condition */
I2C_GenerateSTART(I2C1, ENABLE);
// Test on EV5 and clear it
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT))
{
cod=I2C_GetLastEvent(I2C1);
sprintf(Buf,"%04X %04X",I2C1-›SR2,I2C1-›SR1);
LCD_Text(150,70,Buf);
};
//
I2C_Send7bitAddress(I2C1, PCF_ADDRESS, I2C_Direction_Receiver);
// Test on EV6 and clear it
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED))
{
};
p0=0; p1=0;
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED))
{
};
p0=I2C_ReceiveData(I2C1);
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED))
{
};
p1=I2C_ReceiveData(I2C1);
// Send STOP condition
I2C_GenerateSTOP(I2C1, ENABLE);
return( (~(p0 | (p1‹‹8)) ) &0x0000FFFF );
} |
я специально вывел на экран значения статус-регистров на экран в цикле while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)) потому что именно там и виснет шина I2C.
Когда нажимаю кнопки К1-К15 то выдает 0003 0041, а вот принажатии на К16 код уже 0003 0040, т.е. флаг SB не поднимается.
Получается бесконечное ожидание - и привет.
Причем на такой же схеме у товарища систему вешает совершенно другая кнопка - К13.
Я просто не понимаю причин такого поведения.
Последний раз редактировалось pve70; 27.08.2011 в 15:02.
|
|
|
|
27.08.2011, 17:49
|
|
Гражданин KAZUS.RU
Регистрация: 12.10.2009
Сообщений: 576
Сказал спасибо: 30
Сказали Спасибо 138 раз(а) в 110 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Тут гkюк может быть где угодно. Особенно при использовании библиотек. Мастером кто выступает: кнопки или процессор?
|
|
|
|
27.08.2011, 17:53
|
|
Временная регистрация
Регистрация: 09.02.2007
Сообщений: 91
Сказал спасибо: 0
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
процессор - мастер, как только обнаруживает 0 на PB0 (INT=0 у PCF8575) то начинает читать 2 байта от PCF8575. А 0 на INT у PCF8575 появляется в том случае, если изменяется уровень на любом из его входов, т.е. при нажатии и отпускании кнопок.
|
|
|
|
27.08.2011, 18:05
|
|
Гражданин KAZUS.RU
Регистрация: 12.10.2009
Сообщений: 576
Сказал спасибо: 30
Сказали Спасибо 138 раз(а) в 110 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Переписать без применения библиотек. В документации все есть про повторный старт и т.д., но к библиотекам это не применимо, т.к. там все события переделаны, как я вижу.
|
|
|
|
27.08.2011, 18:18
|
|
Временная регистрация
Регистрация: 09.02.2007
Сообщений: 91
Сказал спасибо: 0
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
да, переход от AVR к ARM тяжело дается. буду думать.
А вот почему конструкция
unsigned char Wheel;
Wheel = GPIOA_IDR_Addr & 0x0f;
не читает состояние 4-х младших бит порта А, а вот такая фигня работает:
Wheel=0;
if (PAin(0)==0) Wheel |=1;
if (PAin(1)==0) Wheel |=2;
if (PAin(2)==0) Wheel |=4;
if (PAin(3)==0) Wheel |=8;
где PAin определено как
#define PAin(n) BIT_ADDR(GPIOA_IDR_Addr,n)
Последний раз редактировалось pve70; 27.08.2011 в 18:21.
|
|
|
|
27.08.2011, 21:00
|
|
Гражданин KAZUS.RU
Регистрация: 12.10.2009
Сообщений: 576
Сказал спасибо: 30
Сказали Спасибо 138 раз(а) в 110 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от pve70
|
А вот почему конструкция
unsigned char Wheel;
Wheel = GPIOA_IDR_Addr & 0x0f;
не читает состояние 4-х младших бит порта А
|
А почему она вообще должна читать что-то из порта? Название GPIOA_IDR_Addr само за себя говорит что это какой-то адрес, то есть просто число. Наверное, если написать *GPIOA_IDR_Addr & 0x0f, то будет работать лучше
(возможно потребуется преобразование типа).
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 15:45.
|
|