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:
結果:
==============================================================