|
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
|
|
|
|
2 страниц
< 1 2
|
 |
Ответов
(15 - 27)
|
Sep 27 2013, 09:35
|
Частый гость
 
Группа: Свой
Сообщений: 80
Регистрация: 8-12-12
Из: Б.М.
Пользователь №: 74 760

|
Цитата(Tapochka @ Sep 27 2013, 11:45)  нашел как увеличить стек http://www.coocox.org/forum/topic.php?id=917однако не могу найти файл arm-gcc-link.ld, где он находится хоть примерно? у меня тут C:\CooCox\CoIDE\configuration\ProgramData\myUSB может у Вас так же. Если получится отпишитесь.
Сообщение отредактировал BvDV - Sep 27 2013, 09:36
|
|
|
|
|
Sep 27 2013, 11:09
|
Участник

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

|
дебагер работает, как ни странно Цитата у меня тут C:\CooCox\CoIDE\configuration\ProgramData\myUSB может у Вас так же. Если получится отпишитесь. спасибо за подсказку, примерно там же был и у меня, однако по вышеприведенной ссылке добавил кусок кода и это ничего не дало(
Сообщение отредактировал Tapochka - Sep 27 2013, 11:09
|
|
|
|
|
Sep 27 2013, 15:31
|
Участник

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

|
размер стека в кококсе находится в файле cmsis_boot/startup/startup_stm32f10x_md.c Код /*----------Stack Configuration-----------------------------------------------*/ #define STACK_SIZE 0x0000500 /*!< The Stack size suggest using even number */ __attribute__ ((section(".co_stack"))) unsigned long pulStack[STACK_SIZE]; У меня usb отваливалось когда в определенном месте я проводил чтение по spi из флешки. Причем чтение из флешки из другого места программы к таким результатам не приводил. По-моему стека не хватает когда подряд вызываются много функций одна в другой, в стек пишется соответствующая инфа по каждой функции плюс прерывания заполняют стек. в итоге проц вываливается. Возможно я ошибаюсь.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|