本帖最后由 Messi1999 于 2015-6-6 21:26 编辑
正在用,在网上看到的分享给大家
#define UARTClkSource_in22MHZ (CLKSEL1 = ((CLKSEL1 & (~UART_CLK)) | UART_22M))
#define UART0_Clock_EN APBCLK |= UART0_CLKEN // Enable UART0 clock
void UART_Init(void)
{
/* Step 1. GPIO initial */
P3_MFP &= ~(P31_TXD0 | P30_RXD0);
P3_MFP |= (TXD0 | RXD0); //P3.0 --> UART0 RX
//P3.1 --> UART0 TX
P0_MFP &= ~(P03_AD3_RTS0 | P02_AD2_CTS0);
P0_MFP |= (RTS0 | CTS0); //P0.3---->RTS0自动方向控制
//这里就是配置的地方,笔者就是这里错了,导致了3个星期没有出来,
/* Step 2. Enable and Select UART clock source */
UART0_Clock_EN; //UART Clock Enable, APBCLK[16]:1
//UARTClkSource_ex12MHZ; //UART Clock is ext12MHz, CLKSEL1[25,24]: 00
UARTClkSource_in22MHZ; //使用内部22MHZ晶振
CLKDIV &= ~(15<<8); //UART Clock DIV Number = 0;
/* Step 3. Select Operation mode */
IPRSTC2 |= UART0_RST; //Reset UART0
IPRSTC2 &= ~UART0_RST; //Reset end
UA0_FCR |= TX_RST; //Tx FIFO Reset
UA0_FCR |= RX_RST; //Rx FIFO Reset
UA0_FCR |= RFITL_1; //设置为1个字节触发中断
UA0_LCR &= (~SPE);
UA0_LCR &= (~EPE);
UA0_LCR &= (~PBE); //Parity Bit Disable 校验禁止
UA0_LCR &= ~WLS;
UA0_LCR |= WL_8BIT; //8 bits Data Length 8位长度
UA0_LCR &= NSB_ONE; //1 stop bit 1位停止位
/* Step 4. Set BaudRate to 115200*/
//UA0_BAUD |= DIV_X_EN; //Mode2:DIV_X_EN = 1
//UA0_BAUD |= DIV_X_ONE; //Mode2:DIV_X_ONE =1
//上面是使用12M晶振的波特率设置
UA0_BAUD &= (~(1<<29)); // UA0_BAUD |= (1<< 29); //Mode2:DIV_X_EN = 1
UA0_BAUD &= (~(1<< 28)); // UA0_BAUD |= (1<< 28); //Mode2:DIV_X_ONE =1
/* For XTAL = 12 MHz */
//UA0_BAUD |= ((12000000 / 9600) -2); //Set BaudRate to 115200; UART_CLK/(A+2) =
//115200, UART_CLK=12MHz
/*FOr 12MHz*/
UA0_BAUD |= ( 22118400UL / 9600/16 -2);
/* For XTAL = 11.0592 MHz */
/UA0_BAUD |= ((11059200 / 115200) -2); //Set BaudRate to 115200;
//UART_CLK/(A+2) = 115200, UART_CLK=12MHz
void initRS485(void)
{
UA0_FUN_SEL = RS485_EN; //设置为485功能
UA0_FCR |= (RX_DIS); //禁止接收器接受</p><p> UA0_RS485_CSR |= RS485_NMM; //设置为485普通操作模式
UA0_RS485_CSR |= RS485_AUD; //设置为控制自动方向模式</p><p> </p><p> /* 开启UART0中断 */
UA0_IER |= RDA_IEN; //开启可接受数据中断和
UA0_IER |= RLS_IEN; //接收器上中断状态使能,是一个错误中断,见M0手册</p><p> NVIC_ISER |= UART0_INT;
// NVIC_IPR3 |= UART0_PRI0; //设置优先级为3(最小优先级)
}
|