В данной теме будет рассмотрено начало работы с USART-ом в микроконтроллерах серии stm32 (плата stm32discovery).

Предполагается, что читатель уже дело с микроконтроллерами.
Лично я имел дело только с МК серии avr.
У вас должна быть установленная среда ColIde и плата моргающая лампочками.
Я использую студию версии 1.2.3. Cтолкнулся с такой проблемой: плата никак не прошивалась.

Такое-же сообщение сообщение об ошибке мне выдавала и сама ide.
Для решения этой проблемы надо взять dll-ку (STLinkUSBDriver.dll) из IAR-a и сунуть в директорию «bin» самой студии.
Подключаем плату, средствами любого переходника, usb-uart к компьютеру где: PA10 = rx, PA9 = tx.
Открываем документацию «Standard Peripherals Firmware Library», открываем раздел «примеры» и ищем пример пример заполнения структуры USART_InitTypeDef:
Инициализируем порты:
Свой printf
Перед отправкой следующего байта необходимо подождать флаг TC (передача окончена).
Открываем терминал, открываем порт, жмем пару раз reset на плате и…

USART в данном МК имеет ещё много режимов работы, на практике разница только в инициализации.
Подобным образом работает большая часть периферии во всей серии STM8/32.

Для начала
Предполагается, что читатель уже дело с микроконтроллерами.
Лично я имел дело только с МК серии avr.
У вас должна быть установленная среда ColIde и плата моргающая лампочками.
Замеченные проблемы
Я использую студию версии 1.2.3. Cтолкнулся с такой проблемой: плата никак не прошивалась.

Такое-же сообщение сообщение об ошибке мне выдавала и сама ide.
Для решения этой проблемы надо взять dll-ку (STLinkUSBDriver.dll) из IAR-a и сунуть в директорию «bin» самой студии.
Hello World, черт возьми!
Запуск UART.
Подключаем плату, средствами любого переходника, usb-uart к компьютеру где: PA10 = rx, PA9 = tx.
Открываем документацию «Standard Peripherals Firmware Library», открываем раздел «примеры» и ищем пример пример заполнения структуры USART_InitTypeDef:
RCC_APB2PeriphClockCmd (RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);
USART_InitStructure.USART_BaudRate = 115200;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No ;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART1, &USART_InitStructure);
USART_Cmd(USART1, ENABLE);
Инициализируем порты:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
/* Configure USART1 Rx (PA10) as input floating */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* Configure USART1 Tx (PA9) as alternate function push-pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
Свой printf, с блэкджеком и куртизанками
void print(const char* str)
{
for(unsigned int i = 0; str[i]; i++)
{
while(!USART_GetFlagStatus(USART1,USART_FLAG_TC));
USART_SendData(USART1,str[i]);
}
}
Перед отправкой следующего байта необходимо подождать флаг TC (передача окончена).
Profit
int main()
{
SetupUSART();
print("Hell Habraworld\n");
return 0;
}
Открываем терминал, открываем порт, жмем пару раз reset на плате и…

Вместо постскриптума
USART в данном МК имеет ещё много режимов работы, на практике разница только в инициализации.
Подобным образом работает большая часть периферии во всей серии STM8/32.