8-logoЕще один маленький шажок в изучении STM32. Попробуем слать данные на ПК через UART.

Собственно думаю не стоит объяснять как работает UART ибо об этом уже было написано достаточно слов, даже на этом сайте, поэтому сразу перейдем к реализации.

Про количество юартов у камня STM32F407VG написано скромно 4 USARTs/2 UARTs, чего в принципе должно хватить на большинство проектов. Названия ножек можно посмотреть в даташите на камень, первые которые попались это UART PA0(USART_TX) и PA1(USART_RX). Uart4 конфликтует с пользовательской кнопкой, поэтому правильнее посмотреть в Cube mx какой UART свободен. Вроде со вторым нет проблем. Поэтому PA2 — Tx, PA3 — Rx.
usart

Если почитать даташит, то напротив них стоит FT, т.е. ножки толерантны к напряжению 5В, теоретически их можно подключать напрямую к переходнику на FT232

Пишем исходник:

#include "stm32f4xx.h"
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_rcc.h"
#include "stm32f4xx_usart.h"
 
int putcharx(int ch)
{
while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
USART_SendData(USART2, (uint8_t)ch);
return ch;
}
 
int main(void)
{
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
 
	GPIO_InitTypeDef PORT_SETUP; //структура настройки ножки
	PORT_SETUP.GPIO_Mode = GPIO_Mode_AF; //альтернативная функция ножки
	PORT_SETUP.GPIO_OType = GPIO_OType_PP; //ножка пуш-пул
	PORT_SETUP.GPIO_Pin = GPIO_Pin_2; //2 ножка
	PORT_SETUP.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &PORT_SETUP);
 
	GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_USART2);
 
	USART_InitTypeDef uart_setup;
	uart_setup.USART_BaudRate = 9600; //скорость 9600
	uart_setup.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //нет контроля потока
	uart_setup.USART_Mode =  USART_Mode_Tx; //только передатчик
	uart_setup.USART_Parity = USART_Parity_No; //без контроля четности
	uart_setup.USART_StopBits = USART_StopBits_1; //1 стоп бит
	uart_setup.USART_WordLength = USART_WordLength_8b; //8 бит данных
	USART_Init(USART2, &uart_setup); //запись структуры
 
	USART_Cmd(USART2, ENABLE); //включить юарт2
 
	putcharx('h');
	putcharx('e');
	putcharx('l');
	putcharx('l');
	putcharx('o');
 
    while(1)
    {
    }
}

Цепляем Rx к Tx. Не забываем, земли Discovery и Ft232 нужно соединять обязательно!!! Запускаем терминал. Собственно hello пришло, если жмакнуть кнопку сброса придет еще раз 🙂
uart4_stm32

Если нужно передать переменную, и ее величина не превышает одного байта, то можно передавать также как символы.
char x = 50;
putchar(x);
Если переменная больше одного байта придется ее «склеивать», как это сделать написано в статье про указатели http://avr-start.ru/?p=1966

Проект кокосика

6 комментариев: UART STM32F4

  • добрый день у вас пример передачи данных через Юарт в стм32 в компиляторе кок0с и осциллограф через виртуальный копорт ,переделал програму на C#, вот мне интересно возможно вы знаете почему при считывании данных с виртуального ком порта приходит те данные, которые я записал в Юарт например у вас » гэлов » в кокосе а у меня при считывания в с # 0 всегда чтобы я неминяв !! Может вы знаете в чем проблема ?? спасибо

  • если принимаете, нужно определяющие условия посмотрите http://avr-start.ru/?p=2230 хоть описано для авр, но суть таже

  • Обновлено

  • «теоретически их можно подключать напрямую к переходнику на FT232»
    Если использовать микросхему FT232RL, то ее питать можно 3,3в и не парится с уровнями.

  • У меня к вам вопрос .Почему вы не публикуете чегото нового?По программированию контроллеров?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Последние комментарии
  • Загрузка...
Счетчик
Яндекс.Метрика