本帖最后由 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(最小优先级)
- }
|