嵌入式課程設計 —— STM32串口編程

STM32F407 串口個數:6個串口

串口1:用來輸出調試信息

STM32串口2的使用:

1)STM32F407開發板 ----------------- tiny4412開發板 通信

網絡串口

2)STM32F407開發板 控制 GPRS模塊,STM32F407--- GPRS模塊也是通過串口發送的

調試連接圖:

 改代碼:串口1--->串口2

查串口2對應個引腳

發送端口UART2_TX ---- PA2

接收端口UART2_RX ---- PA3

代碼:

/*
uart 2 Çý¶¯
*/

#include"sys.h"

//³õʼ»¯IO ´®¿Ú2
//pclk1:PCLK1ʱÖÓƵÂÊ(42Mhz)
//bound:²¨ÌØÂÊ 
void uart2_init(u32 pclk1,u32 bound)
{  	 
	float temp;
	u16 mantissa;
	u16 fraction;	   
	temp=(float)(pclk1*1000000)/(bound*16);//µÃµ½USARTDIV@OVER8=0
	mantissa=temp;				 //µÃµ½ÕûÊý²¿·Ö
	fraction=(temp-mantissa)*16; //µÃµ½Ð¡Êý²¿·Ö@OVER8=0 
    mantissa<<=4;
	mantissa+=fraction; 
	
	RCC->AHB1ENR|=1<<0;   	//ʹÄÜPORTA¿ÚʱÖÓ  
	RCC->APB1ENR|=1<<17;  	//ʹÄÜ´®¿Ú2ʱÖÓ 
	
	//ÉèÖÃPA2 PA3 Ϊ´®¿Ú2 µÄ·¢ËͺͽÓÊÕÒý½Å
	GPIO_Set(GPIOA,PIN2|PIN3,GPIO_MODE_AF,
	         GPIO_OTYPE_PP,GPIO_SPEED_50M,
	         GPIO_PUPD_PU);//PA2,PA3,¸´Óù¦ÄÜ,ÉÏÀ­Êä³ö
 	GPIO_AF_Set(GPIOA,2,7);	//PA2,AF7
	GPIO_AF_Set(GPIOA,3,7);//PA3,AF7  	
	
	//²¨ÌØÂÊÉèÖÃ
 	USART2->BRR=mantissa; 	//²¨ÌØÂÊÉèÖÃ	 
	USART2->CR1&=~(1<<15); 	//ÉèÖÃOVER8=0 
	USART2->CR1|=1<<3;  	//´®¿Ú·¢ËÍʹÄÜ 

	//ʹÄܽÓÊÕÖÐ¶Ï 
	USART2->CR1|=1<<2;  	//´®¿Ú½ÓÊÕʹÄÜ
	USART2->CR1|=1<<5;    	//½ÓÊÕ»º³åÇø·Ç¿ÕÖжÏʹÄÜ	    	
	MY_NVIC_Init(3,3,USART2_IRQn,2);//×é2£¬×îµÍÓÅÏȼ¶ 

	USART2->CR1|=1<<13;  	//´®¿ÚʹÄÜ
}

//´®¿Ú2 ·¢ËÍÒ»¸ö×ֽڵijÌÐò
void Uart2SendByte(u8 ch)
{      
	while((USART2->SR&0X40)==0);//µÚ6λΪ0£¬±íʾ·¢ËÍδÍê³É£»Ñ­»··¢ËÍ,Ö±µ½·¢ËÍÍê±Ï   
	USART2->DR = ch;      

}

//´®¿Ú2 ·¢ËͶà¸ö×ֽڵijÌÐò
void Uart2SendBuf(u8 *buf,int len)
{
	int i = 0;
	for(int i = 0;i < len ; i++)
		Uart2SendByte(buf[i]);
}

//´®¿Ú2 ½ÓÊÕÊý¾Ý£¬Í¨¹ýÖжϷ½Ê½
#define UART2_BUF_LEN 200
u8 Uart2RecvBuf[UART2_BUF_LEN] = {0};
u8 Uart2RecvLen = 0;
void USART2_IRQHandler(void)
{
	if(USART2->SR & (0x1<<5))
	{
		//½ÓÊÕµ½ÁËÊý¾Ý
		Uart2RecvBuf[Uart2RecvLen] = USART2->DR;
		Uart2RecvLen++;
	}
}



main:


結果:



==============================================================



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章