STM32Discovery-для новичка
Привет.Вот купил себе этот модуль-помигал светодиодом,потыкал кнопочку.Хочется дальше продвигаться но мои познания английского остались где-то в 1м класе(Это очень печально)теперь мне сложно в освоении МК.Думаю я не один такой.Вот хочу у вас спросить будете ли вы продвигать STM32 для новичка?Или искать другой форум.Кста спасибо за видео
-
- Сообщения: 162
тоже не спеша учу стм32
покажите свой код мигания?
покажите свой код мигания?
Последний раз редактировалось uschema.com 15 сен 2011, 23:48, всего редактировалось 1 раз.
будете ли вы продвигать STM32 для новичка?Или искать другой форум
Прям на угрозу смахивает - "продвигай или уйду!". Я буду продвигать по мере свободного времени и желания. У меня, помимо бложика, есть семья и работа, поэтому - не все сразу. Если у вас есть конкретные вопросы - задавайте, с удовольствием отвечу.
Хаха))))Та нет не угроза простоя оооочень слаб в это очень.И мне даже стыдно)(.Вопросы будут даже туповаты.Дом семья работа эт очень круто.
Вот вопрос ежедневный для меня это-какой купить не дорогой дисплей чтоб относительно просто было розбираться?ЧБ по типу как в эл книгах.Ну или что вы посоветуете.
Вот код мигания с миру по нитке):-
#include "stm32f10x.h"
int main()
{
RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;
GPIOC->CRH |=GPIO_CRH_MODE9_0 | GPIO_CRH_MODE9_1 |GPIO_CRH_MODE8_0|GPIO_CRH_MODE8_1;
GPIOC->CRH &=~GPIO_CRH_CNF9;
GPIOC->CRH &=~GPIO_CRH_CNF8;
while(1)
{
GPIOA->CRL&=~GPIO_CRL_MODE0;
if (GPIOA->IDR & GPIO_IDR_IDR0)
GPIOC->BSRR = GPIO_BSRR_BS9|GPIO_BSRR_BS8;
for(volatile unsigned int i=0;i<100000;i++){}
GPIOC->BRR = GPIO_BRR_BR9|GPIO_BRR_BR8;
for(volatile unsigned int i=0;i<100000;i++){}
}
return 0;
}
Вот вопрос ежедневный для меня это-какой купить не дорогой дисплей чтоб относительно просто было розбираться?ЧБ по типу как в эл книгах.Ну или что вы посоветуете.
Вот код мигания с миру по нитке):-
#include "stm32f10x.h"
int main()
{
RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;
GPIOC->CRH |=GPIO_CRH_MODE9_0 | GPIO_CRH_MODE9_1 |GPIO_CRH_MODE8_0|GPIO_CRH_MODE8_1;
GPIOC->CRH &=~GPIO_CRH_CNF9;
GPIOC->CRH &=~GPIO_CRH_CNF8;
while(1)
{
GPIOA->CRL&=~GPIO_CRL_MODE0;
if (GPIOA->IDR & GPIO_IDR_IDR0)
GPIOC->BSRR = GPIO_BSRR_BS9|GPIO_BSRR_BS8;
for(volatile unsigned int i=0;i<100000;i++){}
GPIOC->BRR = GPIO_BRR_BR9|GPIO_BRR_BR8;
for(volatile unsigned int i=0;i<100000;i++){}
}
return 0;
}
это я его заставил дискавери купить
Правильно что отписался, не ты один начал изучать стм, а некоторые только планируют, причем как видишь даже про. Короче тема актуальная. Вчасности и для меня
Правильно что отписался, не ты один начал изучать стм, а некоторые только планируют, причем как видишь даже про. Короче тема актуальная. Вчасности и для меня
Тут кто-то есть?)
Вотнашол код для SPI вродь правильный если можете проверьте плз.
//SPI******
RCC->APB2ENR |= RCC_APB2ENR_SPI1EN;//разрешение тактирования SPI
SPI1->CR1 |= SPI_CR1_BR_0;// 1. Ставим частоту передачи Fclck/4
SPI1->CR1 |= SPI_CR1_CPOL;// 2. Ставим Clock Polarity 1 when idl
SPI1->CR1 |= SPI_CR1_CPHA; // 3. Ставим необходимую Clock Phase
SPI1->CR1 &= ~SPI_CR1_DFF;// 4. Размер кадра - 8 бит
SPI1->CR1 |= SPI_CR1_MSTR;// 5. Устанавливаем мастер - режим
SPI1->CR1 |= SPI_CR1_BIDIMODE; // 6. Устанавливаем тип коммуникации в 1 направлении
SPI1->CR1 |= SPI_CR1_BIDIOE;// 7. Включаем только передачу
SPI1->CR1 |= SPI_CR1_SPE;// 6. Включаем SPI
SPI1->DR = 0x21;//передача байта
Я так понимаю что это 30% успеха для работы с LCD?
Вотнашол код для SPI вродь правильный если можете проверьте плз.
//SPI******
RCC->APB2ENR |= RCC_APB2ENR_SPI1EN;//разрешение тактирования SPI
SPI1->CR1 |= SPI_CR1_BR_0;// 1. Ставим частоту передачи Fclck/4
SPI1->CR1 |= SPI_CR1_CPOL;// 2. Ставим Clock Polarity 1 when idl
SPI1->CR1 |= SPI_CR1_CPHA; // 3. Ставим необходимую Clock Phase
SPI1->CR1 &= ~SPI_CR1_DFF;// 4. Размер кадра - 8 бит
SPI1->CR1 |= SPI_CR1_MSTR;// 5. Устанавливаем мастер - режим
SPI1->CR1 |= SPI_CR1_BIDIMODE; // 6. Устанавливаем тип коммуникации в 1 направлении
SPI1->CR1 |= SPI_CR1_BIDIOE;// 7. Включаем только передачу
SPI1->CR1 |= SPI_CR1_SPE;// 6. Включаем SPI
SPI1->DR = 0x21;//передача байта
Я так понимаю что это 30% успеха для работы с LCD?
Привет, тут кто-то есть, просто я никогда не работал с SPI. Запустить SPI - это далеко не 30%. Основную часть займет конфигурация дисплея. Врядле, кто-то за тебя будет проверять твой код. Проще всего тебе взять и самому проверить.
2 tiny: О каком LCD идет речь?
Который не дорогой и работает по SPI.Например сделать часы.Я просто учусь и придумываю себе задачи
Который не дорогой и работает по SPI.Например сделать часы.
Честно говоря, не особо представляю себе такой ЖКИ...
Какой он должен быть: 7-сегментный, алфавитно-цифровой или графический?
Если графика, то цветной, или ч/б?
Вот инициализация SPI (один из вариантов). Использовал ее для работы с microSD и AT45DB321.
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; // 2 линии, полный дуплекс
SPI_InitStructure.SPI_Mode = SPI_Mode_Master; // SPI Master
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; // В посылке 8 бит
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; // В неактивном состоянии SCK = 1
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; // Начало передачи по второму импульсу
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; // Программный контроль NSS
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2; // Коэффициент предделителя = 2
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; // Первым передавать старший бит
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(Dataflash_SPI, &SPI_InitStructure);
SPI_Cmd(Dataflash_SPI, ENABLE); // Включаем SPI
Для работы кода нужно прикрутить к проекту STM32 StdLib.
Пытаюсь разобраться с принципами программирования на С. Вот например в этой строке:
RCC->APB2ENR |= RCC_APB2ENR_SPI1EN;
Что означает "->" и "|="?
А в этой:
PI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
Что означает точка между двумя словами?
RCC->APB2ENR |= RCC_APB2ENR_SPI1EN;
Что означает "->" и "|="?
А в этой:
PI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
Что означает точка между двумя словами?
Последний раз редактировалось Aneg 13 янв 2012, 11:36, всего редактировалось 1 раз.
RCC->APB2ENR |= RCC_APB2ENR_SPI1EN; есть не что иное, как сокращенная форма записи строки RCC->APB2ENR = RCC->APB2ENR | RCC_APB2ENR_SPI1EN;
А -> и точка - это признаки обращения к элементам структуры.
Точка используется при работе с самой структурой, а -> при работе с указателем на нее. Про структуры и указатели лучше почитать литературу.
А -> и точка - это признаки обращения к элементам структуры.
Точка используется при работе с самой структурой, а -> при работе с указателем на нее. Про структуры и указатели лучше почитать литературу.
Сетодиодом поморгал, в усарт данные послал с усарта принял, теперь вот пытаюсь подключить ENC28j60 по SPI кто нибудь пробовал ? Пока не получается по скачанным примерам работать - т.к. считывается мусор. Вот не знаю как подступиться
Ну сам SPI простой как грабли... А чтоб считывалось надо соблюдать требования производителя ) Наверняка косяк где-то )
Получилось забежать к товарищу на 10 мин на осцилограф. Так вот при запуске простой программы типа НСС вниз, задержка, НСС вверх происходит следующее. смотрю на НСС и на SCK. Пока держишь кнопку ресет НСС - 1 и по SCK идут импульсы. Отпускаешь кнопку - импульсы перестают идти НСС опускается на время задержки и подымается, клок не идет ? Почему так может быть в простых граблях? Ниже картинка
- Вложения
-
- look
- spi_work.jpg (55.28 КБ) 37422 просмотра
все заработало - снял экран с eval board к которому тоже был выведен PA
=) Поздравляю!
Я вот тож в своем проекте черти сколько искал грабли, а причина оказалась на поверхности )
Я вот тож в своем проекте черти сколько искал грабли, а причина оказалась на поверхности )
Привет. как реализовать преривание по таймеру, пытался найти пример на других сайтах, одни косяки , использую ИАР, постоянно ругается на мои попытки организовать это приривание по таймеру, надо получить чтото подобное как в АВР, чтоб можна было настроить предделитель, канал
совпадения, сброс по совпадению(можно ручной), как организовать то ?, всё зашифровано в полях структур.
совпадения, сброс по совпадению(можно ручной), как организовать то ?, всё зашифровано в полях структур.
Посмотри в примерах, которые идут со стандартной библиотекой периферии
Просто оставлю это тут, может кому-то будет полезно.
Можно ли прошить микроконтроллер STM32Fxx (STM32F405, STM32F407, STM32F415, STM32F417) через STM32vldiscovery?
Ответ - можно.
Долго гуглил но на русcкоязычных сайтах и форумах ничего толком не нашёл.
На практике прогал через IAR 6.3 Просто поменяв при этом чипик в проэкте на STM32F407VE и включил тут же что хочу юзать FPU. И всё воркает Толко чёто микруха не запускалась от питания который выведен на SWD разъем, взял 3.3V с другого пина на платке.
Можно ли прошить микроконтроллер STM32Fxx (STM32F405, STM32F407, STM32F415, STM32F417) через STM32vldiscovery?
Ответ - можно.
Долго гуглил но на русcкоязычных сайтах и форумах ничего толком не нашёл.
На практике прогал через IAR 6.3 Просто поменяв при этом чипик в проэкте на STM32F407VE и включил тут же что хочу юзать FPU. И всё воркает Толко чёто микруха не запускалась от питания который выведен на SWD разъем, взял 3.3V с другого пина на платке.
Привет. Как попросить IAR разместить переменную/масив/функцию по адресу. на С. типа как в ассемблерре написать .org 0x3000 и всё что ниже будет в памяти начиная с 3000h ?
Написать после переменной @ 0x1234. Это расписано в документации на IAR.
Хочу помигать светодиодом с секундным периодом. Для секундного периода пытаюсь приладить RTC. Все это дело происходит на плате STM32 VL Discovery (та что халявная). IDE Atollic
В Си ни бум-бум, но кое-как написал код.
Никак оно не мигает. Не могу понять, в чем проблема?!
В Си ни бум-бум, но кое-как написал код.
Код: Выделить всё
/* Includes */
#include "stm32f10x.h"
int main(void)
{
/*Настройка Pin 8*/
RCC->APB2ENR |=RCC_APB2ENR_IOPCEN; //Тактирование на порт С
GPIOC->CRH |=GPIO_CRH_MODE8; //Pin 8 на выход с частотой 50 МГц
GPIOC->CRH &=~GPIO_CRH_CNF8; //Push-Pull Output
/*Настройка RTC*/
RCC->APB1ENR |=RCC_APB1ENR_PWREN |RCC_APB1ENR_BKPEN; //Power interface clock enable; Buckup
PWR->CR |=PWR_CR_DBP; // Доступ к RTC and Backup registers разрешен
RCC->BDCR |=RCC_BDCR_BDRST; //CБРОС РЕГИСТРА BUCKUP DOMAIN REGISTER
RCC->BDCR &=~RCC_BDCR_BDRST;
RCC->BDCR |=RCC_BDCR_LSEON | RCC_BDCR_RTCSEL_LSE; //ЗАПУСК LSE-OSCILLATOR; LSE - ИСТОЧНИК ДЛЯ RTC
while (!(RCC->BDCR & RCC_BDCR_LSERDY)){} //ЖДЕМ ПОЯВЛЕНИЯ ФЛАГА LSEDRY (ГОТОВНОСТЬ LSE)
RTC->CRL |=RTC_CRL_CNF; /*УСТАНОВКА ДЕЛИТЕЛЯ*/
RTC->PRLL =32767;
RTC->CRL &=~RTC_CRL_CNF;
RCC->BDCR |=RCC_BDCR_RTCEN; //ЗАПУСК RTC
while (1)
{
if (RTC->CRL & RTC_CRL_SECF)
{GPIOC->BSRR |= GPIO_BSRR_BS8;
RTC->CRL &=~ RTC_CRL_SECF;
} else {GPIOC->BRR |= GPIO_BSRR_BR8;}
}
return 0;
}
Никак оно не мигает. Не могу понять, в чем проблема?!
И ещё какая-то непонятка. Когда пошагово отлаживаю этот код (RTC) вижу что в регистре RTC_ALRH постоянно меняются значения, а в регистре RTC_CNTH ничего не меняется (всегда ноль). Читаю документ RM0041 Reference manual на странице 462, где как я понял, сказано, что в этот регистр заносится значение, с которым сравнивается значение в регистре RTC_CNTH , и при совпадении значений происходит прерывание. Почему там все время меняются значения? Я туда ничего не записываю.
Вернуться в «Микроконтроллеры и ПЛИС»
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 11 гостей