我有一块M0516LDN的小板,参考温子祺的书写程序,发现数据不对,貌似波特率的问题。
大神给看看,谢谢!
#include "SmartM_M0.h"
/*******************************************
*º¯ÊýÃû³Æ£ºUartInit
*ÊäÈ룺unFosc
unBaud ·¢ËÍ×Ö½Ú×ÜÊý
*Êä³ö£ºÎÞ
*¹¦ÄÜ£º´®¿Ú³õʼ»¯
************************************************/
VOID UartInit(UINT32 unFosc,UINT32 unBaud)
{
P3_MFP&=~(P31_TXD0|P30_RXD0);
P3_MFP|=(TXD0|RXD0); //P3.0ʹÄÜΪ´®¿Ú0½ÓÊÕÒý½Å
//P3.1ʹÄÜΪ´®¿Ú0·¢ËÍÒý½Å
UART0_Clock_EN; //´®¿Ú0ʱÖÓʹÄÜ
UARTClkSource_ex12MHZ; //´®¿ÚʱÖÓÑ¡ÔñΪÍⲿ¾§Õñ
CLKDIV&=~(15<<8); //´®¿ÚʱÖÓ·ÖƵΪ0
IPRSTC2|=UART0_RST; //¸´Î»´®¿Ú0
IPRSTC2&=~UART0_RST; //¸´Î»½áÊø
UA0_FCR|=TX_RST; //·¢ËÍFIFO¸´Î»
UA0_FCR|=RX_RST; //½ÓÊÕFIFO¸´Î»
UA0_LCR&=~PBE; //УÑéλ¹¦ÄÜÈ¡Ïû
UA0_LCR&=~WLS;
UA0_LCR&=WL_8BIT; //8λÊý¾Ýλ
UA0_LCR&=NSB_ONE; //1λֹͣλ
UA0_BAUD|=DIV_X_EN|DIV_X_ONE; //ÉèÖò¨ÌØÂÊ·ÖƵ
UA0_BAUD|=((unFosc/unBaud)-2); //²¨ÌØÂÊÉèÖÃUART_CLK/(A+2)=115200bps
}
/*******************************************
*º¯ÊýÃû³Æ£ºUartSend
*ÊäÈ룺 pBuf ·¢ËÍÊý¾Ý»º³åÇø
unNumOfBytes ·¢ËÍ×Ö½Ú×ÜÊý
*Êä³ö
*¹¦ÄÜ£º´®¿Ú·¢ËÍÊý¾Ý
**************************************************/
VOID UartSend(UINT8 *pBuf,UINT32 unNumOfBytes)
{
UINT32 i;
for(i=0;i<unNumOfBytes;i++)
{
UA0_THR=*(pBuf+i);
while((UA0_FSR&TX_EMPTY)!=0x00); //¼ì²é·¢ËÍFIFOÊÇ·ñΪ¿Õ
}
}
VOID UartSendByte(UINT8 pBuf)
{
UA0_THR=pBuf;
while((UA0_FSR&TX_EMPTY)!=0x00); //¼ì²é·¢ËÍFIFOÊÇ·ñΪ¿Õ
}
INT32 main(VOID)
{
UINT32 i;
UINT8 j;
PROTECT_REG //ISPÏÂÔØʱ±£»¤FLASH´æ´¢Æ÷
(
PWRCON|=XTL12M_EN; //ĬÈÏʱÖÓԴΪÍⲿ¾§Õñ
while((CLKSTATUS & XTL12M_STB)==0); //µÈ´ý12MHzʱÖÓÎȶ¨
CLKSEL0=(CLKSEL0 & (~HCLK)) | HCLK_12M; //ÉèÖÃÍⲿ¾§ÕñΪϵͳʱÖÓ
)
UartInit(12000000,9600); //²¨ÌØÂÊÉèÖÃΪ9600bit/s
while(1)
{
j=0; //·¢ËÍÊý¾Ý0~255
//for(i=0;i<256;i++)
//{
UartSendByte(0x55);
//j++;
//Delayms(500);
for(i=0;i<60000;i++);
UartSendByte(0xaa);
for(i=0;i<60000;i++);
//j++;
//Delayms(500);
//}
}
}
|