-
Notifications
You must be signed in to change notification settings - Fork 0
STM32 #3 用UART方式輸出訊息
UART是MCU輸出與輸入字串訊息最通用的方法。UART是Universal Asynchronous Receiver/Transmitter的縮寫,即通用非同步收發傳輸器。此範例的目標是從STM32 MCU輸出"Hello world!"字串輸出,透過NUCLEO-STM32F103開發板上ST-Link Debugger的USB to UART功能,轉換成USB訊號,顯示在電腦終端機(terminal)上。
UART是以一定時脈的串行高低電位,8位元為一組,加上可能的start bit/stop bit/parity bit,代表一字元。
常見的UART速率有9600, 115200 baud等,baud即每秒幾位元(bits/s)。最常見的模式是8-N-1,即(8) data bits, no (N) parity bit, and one (1) stop bit。
更多詳細資訊可見成大資工Wiki -- UART
建立兩個檔案,並放在同個資料夾底下,此資料夾與libopencm3又處於同路徑,如:
libopencm3-
02-usartusart.cMakefile
其檔案內容如下:
#include <libopencm3/stm32/rcc.h>
#include <libopencm3/stm32/gpio.h>
#include <libopencm3/stm32/usart.h>
#include <stdio.h>
#include <errno.h>
int main (void)
{
/* Enable peripheral clocks. */
rcc_periph_clock_enable(RCC_GPIOA);
rcc_periph_clock_enable(RCC_USART2);
/* Setup GPIO pin 2 on GPIO port A for transmit. */
gpio_set_mode(GPIOA, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_ALTFN_PUSHPULL, GPIO2);
/* Setup UART parameters. */
usart_set_baudrate(USART1, 9600);
usart_set_databits(USART1, 8);
usart_set_parity(USART1, USART_PARITY_NONE);
usart_set_stopbits(USART1, USART_STOPBITS_1);
usart_set_flow_control(USART1, USART_FLOWCONTROL_NONE);
usart_set_mode(USART1, USART_MODE_TX);
/* Finally enable the USART. */
usart_enable(USART1);
printf("Hello World!");
while (1)
{
}
return 0;
}
int _write(int file, char *ptr, int len)
{
if (file == 1)
{
int i;
for (i = 0; i < len; i++) usart_send_blocking(USART2, ptr[i]);
return i;
}
errno = EIO;
return -1;
}寫成此程式主要需參考:
此程式所做的依序是:
-
令RCC(Reset & Clock Control)開啟GPIOA以及USART2的Clock。
-
設定GPIO PA2的模式為Alternate function Push-pull輸出,最高速度10MHz。(參考STM32F103xx Reference Manual p.170)
gpio_set_mode(GPIOA, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_ALTFN_PUSHPULL, GPIO2); -
設定USART2模式為9600 8N1。(參考STM32F103xx Reference Manual 第27章)
-
printf("Hello world!\r\n"); printf會呼叫_write這個函數輸出字元,_write再呼叫
usart_send_blocking從USART2輸出。
pyserial 看 COM port