Программирование STM32. Часть 5. Модуль UART STM32. Раздел: STM32 Cortex M3.

Eugene's MCU

Понедельник, 11.11.2013, 14:37

Главная | | Мой профиль | Выход | RSS
Меню сайта
Категории каталога
Рекламный блок





Рекомендовать этот сайт:

Главная » Статьи » » STM32 Cortex M3


Программирование STM32. Часть 5. Модуль UART STM32
     Пример работы с UART (временно без пояснений).

     По флагам:

  
#include "stm32F10x.h"
u8 SMS[]="Hello, my name is STM32F100RB!";

int main(void)
{
 
     u32 tmp=0; 
     RCC->CR|=RCC_CR_HSEON; // Включить генератор HSE.
     while (!(RCC->CR & RCC_CR_HSERDY)) {} // Ожидание готовности HSE.
     RCC->CFGR &=~RCC_CFGR_SW; // Очистить биты SW0, SW1.
     RCC->CFGR |= RCC_CFGR_SW_HSE; // Выбрать HSE для тактирования SW0=1.
     RCC->APB2ENR|= RCC_APB2ENR_IOPAEN; // Разрешить тактирование порта A.
     RCC->APB2ENR|= RCC_APB2ENR_AFIOEN; // Тактирование альтернативных функций GPIO.
     RCC->APB2ENR|= RCC_APB2ENR_USART1EN; // Включение тактирования USART1.
     GPIOA->CRH |= GPIO_CRH_MODE9; // Вывод TX PA.9 - на выход.
     GPIOA->CRH &=~GPIO_CRH_CNF9; GPIOA->CRH |=GPIO_CRH_CNF9_1; // Альтернативный выход.
     USART1->CR1 |=(USART_CR1_RE | USART_CR1_TE); // Разрешить выводы RX, TX - PA10, PA9.
     // Скорость 115.2 kbps. USARTDIV=FSYS/(16*baud) = 8e6/(16*115200) = 4,34.
     USART1->BRR=(4<<4); // Целая часть коэффициента деления USART1.
     USART1->BRR|=5; // Дробная часть*16 = 0,34*16 = 5 (окр).
     USART1->CR1 |=USART_CR1_UE; // Включение USART1.

     while (SMS[tmp]) // Пока не конец строки...
     {
          while (!(USART1->SR & USART_SR_TXE)) {} // Ждать освобождения буфера.
          USART1->DR=SMS[tmp]; tmp++; // Отправить байт.
     }
     while (1)
     {
          if (USART1->SR & USART_SR_RXNE) USART1->DR=USART1->DR; // Отправить принятый байт.
     }
} 
  

     По прерываниям см. проект IAR >> STM32UART_emcu_iar.rar

  


При использовании материалов сайта ссылка на данный источник обязательна.

Категория: STM32 Cortex M3 | Добавил: eugenemcu (30.12.2010) | Автор:

Просмотров: 15987 | Комментарии: 12 | Рейтинг: 4.2/4 |
Всего комментариев: 12
2
* 1 (31.12.2010 16:43) [Материал]
Спасибо, для меня это конкретные примеры помогающие разобраться с STM32.
С наступающим Новым Годом !!!

0
* 2 eugenemcu (01.01.2011 13:26) [Материал]
Спасибо, и Вас с Новым Годом!
Для меня это тоже конкретные примеры помогающие разобраться с STM32

0
* 3 (07.02.2011 13:11) [Материал]
Спасибо за примеры

0
* 4 (14.02.2011 18:41) [Материал]
Здравствуйте, спасибо огромное Вам за хорошие примеры, для начала работы с STM32 сильно помогают. Пример с прерываниями у меня корректно работать не хотел (даже не создавалась таблица векторов прерываний, кроме как внутренних самого ядра) пока я не прикрепил свой StartUp. Если Вам несложно
выложите пожалуйста свой проект с прерываниями интересно посмотреть что я упустил.

0
* 5 eugenemcu (14.02.2011 19:29) [Материал]
Добавил

0
* 6 (12.03.2011 13:31) [Материал]
Здравствуйте, примеры действительно очень хорошие, но у меня не выводит некоторые символы. Если я в терминале набираю "1" 0х31 он мне выводит 0х31 все нормально, а вот если и набрать "8" 0х38 он возвращает мне 0х3С. подскажите пожалуйста из за чего такое может быть. Пример взят полностью от сюда

0
* 7 eugenemcu (12.03.2011 13:46) [Материал]
Каждый раз 0х3С вместо 0х38? Ошибка бита в середине кадра. Престранно!
Дома нет железки. В понедельник на работе проверю.

0
* 8 (12.03.2011 13:55) [Материал]
Может быть это из за скорости? и как мне расчитать на 9600. делаю так:
USART1->BRR=(52<<4);
USART1->BRR|=1;
в ответ одни каракули.

0
* 9 eugenemcu (12.03.2011 14:08) [Материал]
Всё верно рассчитали. Возможно что-то с питанием и уровнями преобразователя UART > RS232.

0
* 10 eugenemcu (14.03.2011 08:41) [Материал]
Проверил. На моём железе работает без ошибок при любых скоростях и с любыми значениями.

0
* 11 (14.03.2011 22:35) [Материал]
Заменил преобразователь уровней, все запахало

0
* 12 (16.01.2012 16:03) [Материал]
можно проще пременить в тактовке, вместо:
// Скорость 115.2 kbps. USARTDIV=FSYS/(16*baud) = 8e6/(16*115200) = 4,34.
USART1->BRR=(4<<4); // Целая часть коэффициента деления USART1.
USART1->BRR|=5; // Дробная часть*16 = 0,34*16 = 5 (окр).
использовать
// Скорость 115.2 kbps. USARTDIV=FSYS/baud = 8e6/115200 = 69.
USART1->BRR=69; // Целая часть коэффициента деления USART1.
// 16*4,34=69

Статистика

Наш магазин




Какую среду разработки Вы используете?

[ Результаты · Архив опросов ]
Всего ответов: 1362



Им нужна Ваша помощь: