Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 03.08.2012, 09:28  
EXIS
Прописка
 
Регистрация: 20.02.2006
Сообщений: 284
Сказал спасибо: 9
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
EXIS на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от st__1 Посмотреть сообщение
А через UART???
через UART медленно (1200 бод) но шьется Write/read protection снял на всякий случай. Frimware перепрошил V2.J15.S0. Чип определяется как Device: STM32F4xx Device ID: 0x413 Revizion: Rev Z.
Читать может, Compare with file тоже работает. А вот при записи вылетает Timeout during flash programming...
Реклама:
EXIS вне форума  
Непрочитано 03.08.2012, 14:19  
serb-radio
Гражданин KAZUS.RU
 
Регистрация: 01.01.2007
Адрес: Таганрог
Сообщений: 571
Сказал спасибо: 26
Сказали Спасибо 213 раз(а) в 91 сообщении(ях)
serb-radio на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Всем доброго времени суток!
Такая проблемка: использую STM32f103VG отконфигурировал UART принимаю данные, все нормально, при приеме более 256 байт МК вмснет, что я не правильно делаю?Мож есть какой то буфер который надо очищать при приеме?
Принимаю команды в ASCII кодах наподобие AT команд
__________________
То, что нас не убивает - делает нас сильнее
serb-radio вне форума  
Непрочитано 03.08.2012, 15:21  
serb-radio
Гражданин KAZUS.RU
 
Регистрация: 01.01.2007
Адрес: Таганрог
Сообщений: 571
Сказал спасибо: 26
Сказали Спасибо 213 раз(а) в 91 сообщении(ях)
serb-radio на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Код:
void USART1_RX_DMA_Init(void)
{
  //Включить тактирование DMA1
  RCC-›AHBENR |= RCC_AHBENR_DMA1EN;
  //Задать адрес источника и приемника и количество данных для обмена
  DMA1_Channel5-›CPAR  =  (uint32_t) &USART1-›DR;      //адрес регистра перефирии
//  DMA1_Channel5-›CMAR  =  (uint32_t) &BuffRxd[0];      //адрес буфера в памяти
  DMA1_Channel5-›CNDTR =  32;                          //количество данных для обмена
   
  //----------------- Манипуляции с регистром конфигурации  ----------------
  //Следующие действия можно обьединить в одну команду (разбито для наглядности)
  DMA1_Channel5-›CCR   =  0;                           //предочистка регистра конфигурации
  DMA1_Channel5-›CCR  &= ~DMA_CCR5_CIRC;               //выключить циклический режим 
  DMA1_Channel5-›CCR  &= ~DMA_CCR5_DIR;                //направление: чтение из перефирии
  //Настроить работу с переферийным устройством
  DMA1_Channel5-›CCR  &= ~DMA_CCR5_PSIZE;              //размерность данных 8 бит
  DMA1_Channel5-›CCR  &= ~DMA_CCR5_PINC;               //неиспользовать инкремент указателя
  //Настроить работу с памятью
  DMA1_Channel5-›CCR  &= ~DMA_CCR5_MSIZE;              //размерность данных 8 бит
  DMA1_Channel5-›CCR  |=  DMA_CCR5_MINC;               //использовать инкремент указателя
  //Уровень приоритета канала
  DMA1_Channel5-›CCR  &= ~DMA_CCR5_PL;                 //самый низкий приоритет
  //Управление прерываниями канала
 // DMA1_Channel5-›CCR  |=  DMA_CCR5_TEIE;               //событие "конец обмена"
 // NVIC_EnableIRQ (DMA1_Channel5_IRQn);                 //разрешить прерывания от выбранного канала
   
  USART1-›CR3  |=  USART_CR3_DMAR;                     //разрешить прием USART1 через DMA
}
void USART1_Init(void)
{
  //Включение тактирования
  RCC-›APB2ENR |=   RCC_APB2ENR_IOPAEN;                //Тактирование GPIO
  RCC-›APB2ENR |=   RCC_APB2ENR_AFIOEN;                //Тактирование альтернативных функций GPIO
  RCC-›APB2ENR |=   RCC_APB2ENR_USART1EN;              //Тактирование USART1
  //Конфигурирование PORTA.9 для TX; PORTA.10 для RX 
  GPIOA-›CRH   &= ~(GPIO_CRH_MODE9 | GPIO_CRH_CNF9);   //Предочистка MODE и CNF
  GPIOA-›CRH   |=   GPIO_CRH_MODE9 | GPIO_CRH_CNF9_1;  //Двухтактный выход с альтернативной ф-ей, 50MHz
  GPIOA-›CRH   &= ~(GPIO_CRH_MODE10 | GPIO_CRH_CNF10); //Предочистка MODE и CNF
  GPIOA-›CRH   |=   GPIO_CRH_CNF10_0;                  //Вход, третье состояние
  //Задание режима работы
 // USART1-›BRR   =   0x09C4;                            //Cкорость обмена 9600 бод
   USART1-›BRR   =   0x00D0;                            //Cкорость обмена 115200 бод
  USART1-›CR1  &=  ~USART_CR1_M;                       //8 бит данных
  USART1-›CR2  &=  ~USART_CR2_STOP;                    //Количество стоп-битов: 1
  //Управление работой
  USART1-›CR1  |=   USART_CR1_UE;                      //Включение модуля USART1
  USART1-›CR1  |=   USART_CR1_TE;                      //Включение передатчика
  USART1-›CR1  |=   USART_CR1_RE;                      //Включение приемника
  //Разрешить прерывания

  NVIC_SetPriority(USART1_IRQn , 1);
  NVIC_EnableIRQ (USART1_IRQn);                        //Прерывания USART1
  USART1-›CR1  |= USART_CR1_RXNEIE;                    //Прерывание по завершении приема
}
__________________
То, что нас не убивает - делает нас сильнее

Последний раз редактировалось serb-radio; 04.08.2012 в 12:22.
serb-radio вне форума  
Непрочитано 11.08.2012, 21:41  
SteAlzzer
Частый гость
 
Регистрация: 04.06.2011
Сообщений: 15
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
SteAlzzer на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Ребят, помогите, пожалуйста. Хочу поставить в качестве SysClk MSI с самой низкой частотой.
Вначале пробовал непосредственно сразу поменять частоту, но мк падал, дебагер ругался.
Затем запустил HSI, перевел тактирование на него. После этого получилось изменить частоту MSI генератора. Однако, когда пытаюсь обратно переключиться на MSI, мк опять падает. Готовности генератора дождался.
Что делаю не так?
SteAlzzer вне форума  
Непрочитано 15.08.2012, 20:26  
Mike121234
Вид на жительство
 
Аватар для Mike121234
 
Регистрация: 02.04.2008
Адрес: Ленинград
Сообщений: 346
Сказал спасибо: 67
Сказали Спасибо 8 раз(а) в 7 сообщении(ях)
Mike121234 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Доброго времени суток!

Подскажите, пожалуйста, к как правильно использовать DMA + UART в режиме чтения?

Когда используешь FIFO все более-менее понятно.

А вот c DMA...
Представим себе ситуацию:

1.) Выделяем под буфер приема положим 64 байта.
2.) Чистим буфер (опционально), т.е. прописываем там 0x0 (64 выделенных байта).
2.) К нам по UART пришла посылка 0x10 0x02 0x00 0x00 0x00 0x00 и благополучно при помощи DMA прописалась в выделенное для нее ОЗУ.
3.) Пусть по таймауту или проверкой битика, взводящегося по по приему байта в UART мы считываем (анализируем ) буфер. Ну с 0x10 и 0x02 все понятно, а вот как быть с нулями? Где конец принятых байтов?

Заранее спасибо.

Последний раз редактировалось Mike121234; 15.08.2012 в 20:33.
Mike121234 вне форума  
Непрочитано 16.08.2012, 11:34  
Sl_
Частый гость
 
Регистрация: 08.05.2011
Сообщений: 25
Сказал спасибо: 12
Сказали Спасибо 7 раз(а) в 4 сообщении(ях)
Sl_ на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

[QUOTE=Mike121234;547673]Доброго времени суток!

Подскажите, пожалуйста, к как правильно использовать DMA + UART в режиме чтения?

Когда используешь FIFO все более-менее понятно.

А вот c DMA...
Представим себе ситуацию:

1.) Выделяем под буфер приема положим 64 байта.
2.) Чистим буфер (опционально), т.е. прописываем там 0x0 (64 выделенных байта).
2.) К нам по UART пришла посылка 0x10 0x02 0x00 0x00 0x00 0x00 и благополучно при помощи DMA прописалась в выделенное для нее ОЗУ.
3.) Пусть по таймауту или проверкой битика, взводящегося по по приему байта в UART мы считываем (анализируем ) буфер. Ну с 0x10 и 0x02 все понятно, а вот как быть с нулями? Где конец принятых байтов?

Все очень просто если в DMA1_Channel5-›CNDTR

// Base 105xx_107x DMA2. 0x4002.0400
// Base 100x4/6/8/B 105xx_107x DMA1. 0x4002.0000
// DMA channel x number of data - DMA_CNDTRx. Reference manual p276.
// DMA_CNDTR5. Offset: 0x005C
// Prepere new start DMA1_Channel5.
// 15:0 - NDT[15:0]: Number of data to transfer.
// Number of data to be transferred (0 up to 65535).
// This register can only be written when the channel is DISABLED!!!!
// Number USART1RX data8 Continues Read from USART1 With help DMA1 Channel5. define in dup0.h.

DMA1_Channel5-›CNDTR = NmbrUSART1RXdata8ContRdWithDMA5;

записали 6, то запрос на прерывание возникнет после 6 принятых байтов.
0x10 0x02 0x00 0x00 0x00 0x00
И не важно какой у вас там размер массива.
Sl_ вне форума  
Непрочитано 17.08.2012, 21:01  
Mike121234
Вид на жительство
 
Аватар для Mike121234
 
Регистрация: 02.04.2008
Адрес: Ленинград
Сообщений: 346
Сказал спасибо: 67
Сказали Спасибо 8 раз(а) в 7 сообщении(ях)
Mike121234 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

[QUOTE=Sl_;547783]
Сообщение от Mike121234 Посмотреть сообщение
Доброго времени суток!

Подскажите, пожалуйста, к как правильно использовать DMA + UART в режиме чтения?

Когда используешь FIFO все более-менее понятно.

А вот c DMA...
Представим себе ситуацию:

1.) Выделяем под буфер приема положим 64 байта.
2.) Чистим буфер (опционально), т.е. прописываем там 0x0 (64 выделенных байта).
2.) К нам по UART пришла посылка 0x10 0x02 0x00 0x00 0x00 0x00 и благополучно при помощи DMA прописалась в выделенное для нее ОЗУ.
3.) Пусть по таймауту или проверкой битика, взводящегося по по приему байта в UART мы считываем (анализируем ) буфер. Ну с 0x10 и 0x02 все понятно, а вот как быть с нулями? Где конец принятых байтов?

Все очень просто если в DMA1_Channel5-›CNDTR

// Base 105xx_107x DMA2. 0x4002.0400
// Base 100x4/6/8/B 105xx_107x DMA1. 0x4002.0000
// DMA channel x number of data - DMA_CNDTRx. Reference manual p276.
// DMA_CNDTR5. Offset: 0x005C
// Prepere new start DMA1_Channel5.
// 15:0 - NDT[15:0]: Number of data to transfer.
// Number of data to be transferred (0 up to 65535).
// This register can only be written when the channel is DISABLED!!!!
// Number USART1RX data8 Continues Read from USART1 With help DMA1 Channel5. define in dup0.h.

DMA1_Channel5-›CNDTR = NmbrUSART1RXdata8ContRdWithDMA5;

записали 6, то запрос на прерывание возникнет после 6 принятых байтов.
0x10 0x02 0x00 0x00 0x00 0x00
И не важно какой у вас там размер массива.
Спасибо за наводку, но...
1.) Предположим, что посылки которые приходя т на вход могут иметь размер 5, 6, 7, 8 байт.
2.) На вход поступает посылка длительностью 7 байт.
3.) Прерывание DMA срабатывает после 6-го байта, мы считываем начало посылки и ожидаем ее окончания.
4.) И ждать мы будем следующего прерывания DMA до тех пор. пока не придет следующая посылка такой длины, чтобы в сумме с первой она составила больше или равно 12 байт.
5.) Но время не ждет.... Нам-бы конец первой отловить. вторая-то может через год прийти...

Вот если-бы как с Fifo, читаем до тех пор. пока в буфере не 0 байт...

Последний раз редактировалось Mike121234; 17.08.2012 в 21:03.
Mike121234 вне форума  
Непрочитано 17.08.2012, 22:29  
Hives
Гражданин KAZUS.RU
 
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
Hives на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Mike121234 зачем вам DMA для обработки такого мелкого потока? работает на FIFO - и не трогай.
Hives вне форума  
Непрочитано 18.08.2012, 14:46  
Sl_
Частый гость
 
Регистрация: 08.05.2011
Сообщений: 25
Сказал спасибо: 12
Сказали Спасибо 7 раз(а) в 4 сообщении(ях)
Sl_ на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Mike121234 Откуда Вы знаете длину посылки? Из первого принятого байта?
Вашу задачу я бы решил используя прерывание по каждому принятому байту, те вообще без DMA.
Ну или как компромис минимальнуя длину 4 байта через DMA, затем запретив его через прерывания UARTa - но это уже как-то коряво.
Sl_ вне форума  
Непрочитано 20.08.2012, 20:56  
pas272
Частый гость
 
Регистрация: 04.01.2009
Сообщений: 15
Сказал спасибо: 5
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
pas272 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Добрый день!
Никак не могу справиться с выдачей ШИМ на stm32f103v (100 pin). Вот что я делаю:
porta.1 (tim2_ch2) в режим альтернативный выход.
включаю тактирование porta и tim2.
далее загружаю регистры таймера:
в ARR записываю 0xFF (перезагрузка счетчика)
в CCR2 записываю 0x10 (регистр сравнения)
в CCMR1 записываю 0x6000 (т.е. в OC2M будет 6 - режим PWM1)
в CR1 устанавливаю бит CEN - запуск таймера.

На выходе porta.1 - ноль. Что я еще не доделал?
Содержимое регистров контролирую в кейле. Счетчик таймера бежит и перезагружается.
pas272 вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Школа АRMрестлинга Uragan90 Микроконтроллеры, АЦП, память и т.д 54 22.08.2011 16:13
ARM Cortex M3 + Linux SiMiLya Микроконтроллеры, АЦП, память и т.д 10 17.06.2011 17:20
Помогите с STM32 - очень нужно... yakuzaa Микроконтроллеры, АЦП, память и т.д 60 04.08.2010 11:04
Как добавить поддержку для STM32 SFHK Микроконтроллеры, АЦП, память и т.д 11 18.12.2009 18:09


Часовой пояс GMT +4, время: 21:22.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot