Страницы

понедельник, 25 ноября 2013 г.

USART send stm32

Подключаем такие модули библиотеки:

#include "stm32f4xx.h"
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_rcc.h"
#include "stm32f4xx_usart.h"

Объявим две структуры для хранения настроек периферии.
 
//Структуры для инициализации GPIOA и USART1
GPIO_InitTypeDef    GPIO_InitStruct;
USART_InitTypeDef    USART_InitStruct;

Прототипы функций:
 
void Usart1_Init(void); //Объявление функции инициализации периферии
void Usart1_Send_symbol(uint8_t); //Объявление функции передачи символа
void Usart1_Send_String(char* str); //Объявление функции передачи строки

Функция инициализации USART1:
 
void Usart1_Init() {
//Включаем тактирование GPIOA, USART1
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
//Инициализация вывода PA9 - USART1_Tx
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9; //Настройки вывода PA9
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; // скорость порта
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF; // режим альтернативной функции
GPIO_Init(GPIOA, &GPIO_InitStruct); // заданные настройки сохраняем в регистрах GPIOА
//Инициализация вывода PA10 - USART1_Rx
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10; // настройки вывода PA10
GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_AF; // режим альтернативной функции
GPIO_Init(GPIOA, &GPIO_InitStruct); // заданные настройки сохраняем в регистрах GPIOА
GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);
GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);
//Инициализация USART1
USART_InitStruct.USART_BaudRate = 1200; // скорость обмена 1200 бод
USART_InitStruct.USART_WordLength = USART_WordLength_8b; // длина слова 8 бит
USART_InitStruct.USART_StopBits = USART_StopBits_1; // 1 стоп-бит
USART_InitStruct.USART_Parity = USART_Parity_No ; // без проверки четности
USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // без аппаратного контроля
USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; // включен передатчик и приемник USART1
USART_Init(USART1, &USART_InitStruct); // заданные настройки сохраняем в регистрах USART1
USART_Cmd(USART1, ENABLE); // включаем USART1
}


Функция передачи байта через USART:
 
void Usart1_Send_symbol(uint8_t data) {
while(!(USART1->SR & USART_SR_TC)); // проверяем установку флага TC - завершения предыдущей передачи
USART1->DR = data; // записываем значение в регистр данных - передаем символ
}

Фунция передачи строки через USART:
 
void Usart1_Send_String(char* str) {
uint8_t i=0;
while(str[i]) {
Usart1_Send_symbol(str[i]);
i++;
}
// передаем сивол конца строки
Usart1_Send_symbol('\n');
Usart1_Send_symbol('\r');
}

Для использования необходимо провести инициализацию соответствующей функцией и отправить нужные байты.
 
int main() {
Usart1_Init(); //Вызов функции инициализации периферии
//Передаем строку, сообщающую о готовности микроконтроллера к обмену данными
Usart1_Send_String("I'm ready!");
while(1) {
}

Комментариев нет:

Отправить комментарий

ваше мнение...