打印
[Cortex-M0技术交流]

nuc系列串口通讯求教

[复制链接]
5072|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
penger|  楼主 | 2012-1-13 10:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用的是nuc100ve3an,用串口0与PC机通讯,PC机通过以太网传输数据,
数据经一个以太网转串口模块与nuc的串口0连接。程序中采用中断方式接收
串口数据。目前串口中断可响应,响应后也收到数据,但数据中每个字节内容
不对,数据帧长度也与发送端不一致。
后面将以太网转串口模块的输出接了一个rs232转换芯片接到另一台电脑串口上,
用串口精灵查看,发现接收的数据都正确,看来上位机和以太网转串口模块没
问题,问题应该还是在nuc的板子上。
下面是串口部分的程序,求教大家看看。
int main(void)

//串口部分初始化
  UNLOCKREG(); //解锁寄存器
  DrvSYS_SetOscCtrl(E_SYS_XTL12M,1); //使能外部12M晶振
  DrvSYS_SetOscCtrl(E_SYS_OSC22M,1); //使能内部22M晶振
  Delay_Loop(200);     //适当延时
  DrvSYS_SelectHCLKSource(0); //设置外部12Mhz晶振作为时钟源
  DrvSYS_SetClockDivider(E_SYS_HCLK_DIV,0); //设置HCLK时钟频率=12MHz/(0+1)=12MHz,SPI时钟基准

  DrvGPIO_InitFunction(E_FUNC_UART0_RX_TX); //GPIO初始化为UART0
DrvSYS_SelectIPClockSource(E_SYS_UART_CLKSRC,0x03);//选择外部22.1184MHz晶振作为3组UART时钟基准
  DrvSYS_SetClockDivider(E_SYS_UART_DIV,1);//基准再分,UART时钟为11.0592MHz
  sParam0.u32BaudRate=57600;
  sParam0.u8cParity=DRVUART_PARITY_NONE;
  sParam0.u8cDataBits=DRVUART_DATABITS_8;
  sParam0.u8cStopBits=DRVUART_STOPBITS_1;
  sParam0.u8cRxTriggerLevel=DRVUART_FIFO_1BYTES;
  sParam0.u8TimeOut=0;
  DrvUART_Open(UART_PORT0,&sParam0);   //UART0参数设置,波特率、字节数量、停止位、FIFO字节大小
  tUART= (UART_T *)((uint32_t)UART0+UART_PORT0);
  tUART->IER.RDA_IEN=1;                 //接收中断使能
  NVIC_EnableIRQ(UART0_IRQn);                    //使能UART0
  LOCKREG(); //锁定寄存器
while(1)      
{
   //其它程序循环部分



//串口中断函数

void UART02_IRQHandler(void)
{
//user add
UART_T * tUART0;    //UART0指针
UART_T * tUART2; //UART2指针
uint8_t content; //临时数据存储

/*---------------------------------------------------*/
    uint32_t u32uart0IntStatus,u32uart2IntStatus;
    u32uart0IntStatus = inpw(&UART0->ISR) ;

u32uart2IntStatus = inpw(&UART2->ISR) ;

    if(g_pfnUART0callback != NULL)
{
        g_pfnUART0callback(u32uart0IntStatus);
    }
if(g_pfnUART2callback != NULL)
    {
        g_pfnUART2callback(u32uart2IntStatus);
    }
//user add
tUART0 = (UART_T *)((uint32_t)UART0 + UART_PORT0);
tUART2 = (UART_T *)((uint32_t)UART0 + UART_PORT2);
if((tUART0->ISR.RDA_INT)&&(tUART0->ISR.RDA_IF))      //串口0接收中断
{
   content=UART0->DATA;
   Buffer_ReceivePC[Buffer_ReceivePCIndex]=content;
Buffer_ReceivePCIndex++;
if(Buffer_ReceivePCIndex==(0x06))
{
  Buffer_ReceivePCIndex=0x00;
}
}

相关帖子

沙发
disixin| | 2012-5-15 10:34 | 只看该作者
我现在在做nuc100的485通讯 楼主赐教点经验吗?我搞了2天了 还没有啥结果

使用特权

评论回复
板凳
296895536| | 2013-3-16 17:58 | 只看该作者
能给个NUC串口发送接收的列子给我吗?  谢谢~  296895536@qq.com

使用特权

评论回复
地板
缥缈九哥| | 2013-3-16 20:47 | 只看该作者
详细例子BSP中很全面 了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

2

帖子

0

粉丝