|
#include "Config.h"
u8 Uart_Receive_Flag=0;
u8 Uart_Send_len=0;
u16 Uart_Receive_len=0;
u8 Uart_Receive_Ack_len=0; //期望 接收到的ACK 長(zhǎng)茺
u8 Uart_Send_Buf[UART_SEND_LEN];
u8 Uart_Receive_Buf[UART_RECEIVE_LEN];
void UART1_IO_Config(void)
{
PA_DDR_DDR3 =0;//輸入
PA_CR1_C13 =1;//上拉輸入
PA_CR2_C23 =0;
PA_ODR_ODR2 =1;
PA_CR1_C12 =1;//推挽輸出
PA_CR2_C22 =1;//輸出擺率10M
PA_DDR_DDR2 =1;//輸出高電平,TX空閑狀態(tài)為高電平,如果不設(shè)置,會(huì)莫名奇妙的發(fā)送0x00
//開啟引腳的UART功能
//00: USART1_TX on PC3 and USART1_RX on PC2
//01: USART1_TX on PA2 and USART1_RX on PA3
//10: USART1_TX on PC5 and USART1_RX on PC6
SYSCFG_RMPCR1_USART1TR_REMAP =1;//PC2,PC3 這個(gè)要搞懂
//如果需要使用其他引腳作為串口發(fā)送接收引腳,請(qǐng)?jiān)谶@里選擇
}
void UART1_CLK_EN()
{
CLK_PCKENR1_PCKEN15=1;//開啟USART外設(shè)時(shí)鐘
}
void UART1_CLK_DIS()
{
CLK_PCKENR1_PCKEN15=0;//開啟USART外設(shè)時(shí)鐘
}
void UART1_Mode_Config()
{
//設(shè)置串口工作方式
USART1_CR1_M =0;//1 start bit,8 data bit,n stop bit
USART1_CR3_STOP0=0;USART1_CR3_STOP1=0;//1 stop bit
//設(shè)置波特率
//波特率設(shè)置為9600
// 2000000/9600=208 //2000000是此時(shí)系統(tǒng)的主時(shí)鐘頻率,默認(rèn)8分頻,16M/8=2M
//208(DEC)=00D0(HEX)
USART1_BRR2 =0x03;//the BRR2 should be programmed before BRR1
USART1_BRR1 =0x68;
USART1_CR2_TEN=1;//使能發(fā)送
// USART1_CR2_TIEN=0;//打開發(fā)送中斷
USART1_CR2_REN=1;//使能接收.
USART1_CR2_RIEN=1;//打開接收中斷
}
void UART1_NVID_Config()
{
}
void UART1_Config()
{
UART1_IO_Config();
UART1_CLK_EN();
UART1_Mode_Config();// 9600 8 1 發(fā)送 接收 接收中斷
UART1_NVID_Config();
}
void Uart1_Send_Data(unsigned char data)
{
while(0 == USART1_SR_TXE); //判斷發(fā)送數(shù)據(jù)寄存器是否為空
USART1_DR = data; //向發(fā)送寄存器寫入數(shù)據(jù)
}
void Uart1_Send_String(u8 *data,u8 len,u8 enter_en)
{
u8 i=0;
for(i=0;i<len;i++)
{
Uart1_Send_Data(data[i]);
}
if(ENTER_EN == enter_en )
{
Uart1_Send_Data(0x0D);
Uart1_Send_Data(0x0A);
}
}
void UART_Receive_Buf_Clear()
{
Uart_Receive_len = 0;
Uart_Receive_Flag = 0;
}
void Send_ADC_Value(void)
{
Uart1_Send_String("val= ",5,ENTER_DIS);
Uart1_Send_Data(VDD_Value1/10 +0x30);
Uart1_Send_Data(VDD_Value1%10 +0x30);
Uart1_Send_String("V",1,ENTER_EN);
}
#pragma vector=USART_T_TXE_vector
__interrupt void USART_TX_ISR (void)
{
if(USART1_SR_TC==1);
}
#pragma vector=USART_R_RXNE_vector
__interrupt void USART_RX_ISR(void)
{
u8 ch;
if(1 == USART1_SR_RXNE)
{
Uart_Receive_Flag |= TRUE;
if(0x8000 != (Uart_Receive_len&0x8000))
{
Uart_Receive_Buf[Uart_Receive_len++] = USART1_DR;
if((Uart_Receive_len>=UART_RECEIVE_LEN)||(Uart_Receive_len>=Uart_Receive_Ack_len))
{
Uart_Receive_len |= 0x8000;
}
}
else
{
ch = USART1_DR;
}
}
}
|
|