cortex_m3_stm32嵌入式學習筆記(三):串口實驗(串口通信)

ARM 451瀏覽

串口,可以理解為是用來和上位機(比如電腦)對話的,本節實驗實現的是stm32接收上位機發送過來的信息,在原原本本的返回過去

stm32有5路串口,本節學習的是其中之一的USB串口(USART1)和學習IO口一樣,首先要配置串口,由于原子已經配好了寫在sys文件里,本渣就本著不造輪子的理念(其實是太難不懂orz),先跳過去了。。

所以本工程只需要一個main函數即可

#include "led.h"
#include "sys.h"
#include "delay.h"
#include "usart.h"
void init(void)
{
	delay_init();
	LED_Init();
	NVIC_Configuration();//設置中斷分組
	uart_init(9600);//串口初始化,波特率9600
}
int main(void)
{
	u8 i,len;
	u16 times=0;
	init();
	while(1)
	{
		if(USART_RX_STA&0X8000)//接收到了數據
		{
			len=USART_RX_STA&0xfff
			//printf("rn泥發送的消息為:rn");
			for(i=0;i<len;i++)
			{
				USART1->DR=USART_RX_BUF[i];
				while((USART1->SR&0X40)==0);//等待發送結束
			}
			printf("rnrn");
			USART_RX_STA=0;
		}
		else//不接收數據時
		{
			++times;
			if(times%5000==0)printf("rnlovern");
			if(times%30==0)LED0=!LED0;	
			delay_ms(10);
		}
	}
}

可能上面的代碼有點看不懂,我們翻到usart.c 里面有這么一段代碼

//串口1中斷服務程序
//注意,讀取USARTx->SR能避免莫名其妙的錯誤   	
u8 USART_RX_BUF[USART_REC_LEN];     //接收緩沖,最大USART_REC_LEN個字節.
//接收狀態
//bit15,	接收完成標志
//bit14,	接收到0x0d
//bit13~0,	接收到的有效字節數目
u16 USART_RX_STA=0;       //接收狀態標記	  

0x8000對應的2進制 100000000000000?

0x3fff 對應的2進制 ?0011111111111111

這樣就很明顯了。。(感覺離底層越來越遠了)

將程序燒進去之后打開串口調試助手 界面顯示如下:

還會看到LED一直閃爍。。說明程序應該沒問題

七星彩走势图2元网官网