#define LED_1 GPIOA->BSRR |= GPIO_ODR_0 // stm32f030 Управление LED #define LED_0 GPIOA->BRR |= GPIO_ODR_0 // stm32f030
#define PC13_0 GPIOC->BSRR |= GPIO_ODR_ODR13 // PC13 OUT LED OFF (stm32f103) Управление LED1 #define PC13_1 GPIOC->BRR |= GPIO_ODR_ODR13 // PC13 OUT LED ON (stm32f103) #define PC13_N GPIOC->ODR ^= GPIO_ODR_ODR13 // PC13 OUT LED INVERT (stm32f103)
union un_dataword { // 5 Байт, объединение содержит данные для передачи AD9850 uint32_t dataword_freq; // 32 бит слово, для управления частотой uint8_t dataword_byte[5]; // массив для побайтного доступа }un;
// Обработчик прерываний от SPI1 (for spi slave) void SPI1_IRQHandler(void) { SPIData=0; if ((SPI1->SR & SPI_SR_RXNE) == 1) { // Прерывание вызвано приемом байта? SPIData = SPI1->DR; // Читаем то что пришло, clear flag if (led_st == 1) {LED_0; led_st=0;} else {LED_1; led_st=1;} // Инвертируем состояние светодиода SPI1->DR = SPIData; // Отправляем обратно то что приняли } }
// Обработчик прерывани¤ системного таймера, прерывани¤ каждую 1 ms void SysTick_Handler() { if (TimingDelay != 0) TimingDelay--; }
// Функция временной задержки в милисекундах void Delay_ms(uint32_t nTime) { TimingDelay = nTime; while (TimingDelay != 0) {} }
/* while (1) { // for spi slace CS_ON(); // Подаем сигнал CS слейву SPISendByte(data); // Передаем байт через SPI1 CS_OFF(); // Снимаем сигнал CS if ((data-1) == SPIData) LED_1; // Пришли правильные данные? // Возможно тут есть неочевидный момент. Отправляем data, а ожидаем (data-1). // Это связано с тем, что слейв не может передавать данные пока мастер не // инициирует обмен данными. Таким образом если мастер сейчас передает // число 123, то оно ему вернется когда он будет передавать следующий байт (124). data++; Delay_ms(10); LED_0; Delay_ms(200); } */ }
Заголовок сообщения: Re: STM32F030 (STM32F103) и генератор до 40 МГц AD9850
Добавлено: Пт июл 24, 2015 09:54:10
Друг Кота
Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19754 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:2 Медали: 1
ичо?
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Заголовок сообщения: Re: STM32F030 (STM32F103) и генератор до 40 МГц AD9850
Добавлено: Вс июл 26, 2015 23:05:42
Электрический кот
Зарегистрирован: Вт май 05, 2009 10:43:42 Сообщений: 1087 Откуда: Россия
Рейтинг сообщения:1
ТС решил похвалиться. Собсна наверно все.
Если по теме, то спасибо, слизал в копилку, и отдельная благодарность за нормальную инициализацию путем обращения к регистрам, а не всякие там CMSIS-овские initStructure
И собственно - на кой здесь прерывания да еще и слейва ?
Реально.
Все, что закомментировано, относится к созданию связи по SPI между двумя контроллерами. Прием осуществляется в прерывании. Этот код шпаргалка для разных случаев.
Дабы не плодить новую тему, спрошу у уважаемых знатоков здесь... Ситуация такова. По какой-то невыясненной причине недавно приобретённый ST-Link V.2 не "видит" камень STM32F030P4. При том, что он отлично "видит" STM32F100C4, STM32F100RB, STM32F103C8. Это из ST_Link утилиты и из Кейла и из Кокоса. Но в то же время Jet Link 8 прекрасно "видит" все перечисленные выше камни из J_Flash и Кейла. Как такое может быть? Вывод BOOT F030 подключал и на землю и на питание - ничего не меняется. Осциллографом наличие, что SWCLK, что SWDIO подтверждается. Можно было бы погрешить на партию F030, но ведь J_Link-ом программируется и работает нормально. ST-Link проапгрейдил до последней версии. Подскажите, пожалуйста, в какую сторону копать? Спасибо.
Заголовок сообщения: Re: STM32F030 (STM32F103) и генератор до 40 МГц AD9850
Добавлено: Вс июн 05, 2016 08:08:18
Собутыльник Кота
Карма: 29
Рейтинг сообщений: 651
Зарегистрирован: Сб май 14, 2011 21:16:04 Сообщений: 2708 Откуда: г. Чайковский
Рейтинг сообщения:0 Медали: 1
Тему Вы конечно "удачную" выбрали для своего вопроса. Попробуйте стереть камень прогой STM32 ST-LINK Utility. Я как-то что такое залил в 103 и кокос перестал его видеть , когда стер этой утилиткой то все опять заработало.
_________________ Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Конечно подключен! Вот я прямо на месте вытыкаю шлейф из ST-Link-а и втыкаю его в J-Link ничего не меняя на макетке. В итоге J-Link прекрасно всё читает, пишет и пр. Даже не знаю, что и думать (((
Огрызок потому что у него нет транслятора уровней. Пробовать обновить STlink utility , затем обновить прошивку STLink. Но возможен печальный исход- придется перекатывать чип и шить ...
s_black, нет этот полноценный. Здесь есть транслятор уровней. И вот здесь нужно обязательно подавать на Vtarget ( Если не ошибаюсь PIN1 разъма) напряжение питание с отлаживаемой платы. Так же как и на JLink8. Сие сделано? Ну и как выше писал - поставить STlink utility свежую и проапгрейдить прошивку STLink.
Да, всё так и делаю: и питание, и свежая утилита, и апгрейд. Говорю же - остальные камни отлично определяются, читаются и пишутся, только 030, как заколдованный. Попробую завтра с другим камнем из этой же партии.
s_black . а что куда подсоединяем? Было неоднократно что соединяли длинным шлейфом, коннекта не было. У меня что JLink и V8 и 072 что STLINK подсоединяю одиночными проводами 15см - полет норамльный. И что пишет в лог STLink?
Я ж Вам говорю - работаю с 030 через J-Link Кейле - всё шьёт и читает. Отсоединяю шлейф ТОЛЬКО от программатора, ничего не меняя на макетке и перестыковую его на СТ-линк, а на выходе болт. Утилита пишет, что не может законнектить таржет и просит выбрать коннект анде ресет. После такового выбора всё равно ни фига.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения