|
spi и usb на stm32 |
|
|
|
Sep 25 2013, 12:38
|
Участник

Группа: Участник
Сообщений: 21
Регистрация: 26-02-13
Пользователь №: 75 799

|
Здравствуйте. Моя задача такова: по spi принимать/отдавать данные с АЦП и по usb передавать принятые данные на hyperterminal на компе(комп должен видеть плату как виртуальный com порт) на плате stm32f4discovery. По отдельности спи и виртуальный com порт работают нормально, но вместе com порт не инициализируется, а комп видит плату как неисправное usb устройство. Помогите разобраться в чем может быть проблема т.к. ноги otg и spi-шные не пересекаются, вроде сто раз проверил(spi3 - PC10, PC11, PC12), просто ума не приложу в чем может быть проблема. Код main для организации виртуального com порта и вывод напечатанных символов с клавы на терминал: Код #include "stm32f4xx.h" #include "usbd_cdc_vcp.h" // подключаем USB CDC
__ALIGN_BEGIN USB_OTG_CORE_HANDLE USB_OTG_dev __ALIGN_END;
const char ch3[]="receive 3\x0D\x0A"; const char ch4[]="получено 4\x0D\x0A"; char ch5[]="receive 5\x0D\x0A"; char ch6[]="receive 6\x0D\x0A";
int main(void) { SystemInit(); // настройки тактирования
// включаем usb USBD_Init(&USB_OTG_dev,USB_OTG_FS_CORE_ID,&USR_desc,&USBD_CDC_cb,&USR_cb);
while (1){
if(usb_cdc_kbhit()){ // проверка: приняты данные? char c; c = usb_cdc_getc(); // получение байта с usb switch(c){ // разбор принятого символа case '3': usb_cdc_printf((char *)ch3); // строки на хост break; case '4': usb_cdc_printf((char *)ch4); break; case '5': usb_cdc_printf(ch5); break; case '6': usb_cdc_printf(ch6); break; } } } } прикрепляю полный проект на кокосе, proba6 главный
Прикрепленные файлы
______.rar ( 461.15 килобайт )
Кол-во скачиваний: 38
|
|
|
|
|
Sep 25 2013, 16:45
|
Участник

Группа: Участник
Сообщений: 72
Регистрация: 28-06-10
Пользователь №: 58 174

|
попробуй стек увеличить. может поможет.
|
|
|
|
|
Sep 25 2013, 17:37
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
я не смотрел код, так что идеи из раздела пальцем в небо, но вдруг помогут.
когда-то я делал УСБ ручками и если во время "регистрации" устройства в винде, у меня возникали паузы на ответ контрлером больше определенных, заканчивалось все состоянием неисправное устройство. У меня паузы были вызваны попытками выслать отладочные данные. Может у вас в процесс регистрации влазит ваш SPI с АЦП, возникает паузы и готово? Паузы на ответы там разрешены мизерные, все должно быть практически мгновенно.
И второе, где-то тут проходила информацию про ножку УСБ которая типа сигнализирует о наличии конекта, если ее как-то предержать все падало, а она включалась автоматически как ей задавалось направление, не зависимо от функций. Я не очень точно помню тему, проверьте ножки УСБ которые обычно диодиками машут, ваш SPI или АЦП не попало на какую либо такую...
|
|
|
|
|
Sep 26 2013, 04:21
|
Частый гость
 
Группа: Участник
Сообщений: 138
Регистрация: 27-12-11
Пользователь №: 69 107

|
Цитата(Golikov A. @ Sep 25 2013, 20:37)  И второе, где-то тут проходила информацию про ножку УСБ которая типа сигнализирует о наличии конекта, если ее как-то предержать все падало, а она включалась автоматически как ей задавалось направление, не зависимо от функций. Это интересно. Название топика не подскажите?
|
|
|
|
|
Sep 26 2013, 11:10
|
Участник

Группа: Участник
Сообщений: 21
Регистрация: 26-02-13
Пользователь №: 75 799

|
спасибо большое, однако нету в моей библиотеке дефайна VBUS_SENSING_ENABLED, да и по схеме проверил PC10, PC11, PC12 никак на дискавери не связаны с usb. не в пинах счастье  Цитата Может у вас в процесс регистрации влазит ваш SPI с АЦП, возникает паузы и готово? Паузы на ответы там разрешены мизерные, все должно быть практически мгновенно. видимо в этом и дело
Сообщение отредактировал Tapochka - Sep 26 2013, 11:12
|
|
|
|
|
Sep 26 2013, 12:01
|
Участник

Группа: Участник
Сообщений: 21
Регистрация: 26-02-13
Пользователь №: 75 799

|
сделал кнопку - vcp нормально не определяется хоть при нажатой, хоть нет. неужели дело в портах((( подскажите пожалуйста что думаете, просто ума не приложу как связаны могут быть spi и usb ногами в моем примере
|
|
|
|
|
Sep 26 2013, 12:35
|
Участник

Группа: Участник
Сообщений: 21
Регистрация: 26-02-13
Пользователь №: 75 799

|
Цитата что-то я в proba6.c не увидел обработчик SPI3_IRQn. а что следует в обработчике делать по-вашему?
|
|
|
|
|
Sep 26 2013, 13:10
|
Участник

Группа: Участник
Сообщений: 21
Регистрация: 26-02-13
Пользователь №: 75 799

|
spi-шных прерываний то нету в проекте, если только usb-шные свои, в файле usb_bsp.c... а как стек то увеличить?
|
|
|
|
|
Sep 27 2013, 08:45
|
Участник

Группа: Участник
Сообщений: 21
Регистрация: 26-02-13
Пользователь №: 75 799

|
нашел как увеличить стек http://www.coocox.org/forum/topic.php?id=917однако не могу найти файл arm-gcc-link.ld, где он находится хоть примерно?
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|