TI中文支持网
TI专业的中文技术问题搜集分享网站

UART接收数据

void
__error__(char *pcFilename, uint32_t ui32Line)
{
}
#endif

//*****************************************************************************
//
// UART0中断处理程序
//
//*****************************************************************************
void
UART0IntHandler(void)
{
    uint32_t ui32Status;

    //
    // 获取中断状态
    //
    ui32Status = UARTIntStatus(UART0_BASE, true);

    //
    // 清除中断
    //
    UARTIntClear(UART0_BASE, ui32Status);

    GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_2, 0x1<<0);//B2管脚置0  对应RESETAB

    GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_3, 0x1<<0);//B3管脚置0 对应RESETCD

    PWMGenDisable(PWM1_BASE, PWM_GEN_2 );//禁能PWM发生器

    //禁能PWM输出状态
    PWMOutputState(PWM1_BASE, PWM_OUT_4_BIT| PWM_OUT_5_BIT, false);

    //
  j=UARTCharGetNonBlocking(UART0_BASE);//接收串口数据
  while(UARTCharsAvail(UART0_BASE))
    {
        //
        // 读取UART中的字符并发送
        //
        UARTCharPutNonBlocking(UART0_BASE,
                                   UARTCharGetNonBlocking(UART0_BASE));
    }
      PWMPulseWidthSet(PWM1_BASE, PWM_OUT_4, j);

    PWMPulseWidthSet(PWM1_BASE, PWM_OUT_5, j);
    //使能PWM输出状态
    PWMOutputState(PWM1_BASE, PWM_OUT_4_BIT| PWM_OUT_5_BIT, true);

    GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_2, 0x1<<2);//H2管脚置高  对应RESETAB

    GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_3, 0x1<<3);//H3管脚置高 对应RESETCD

    //
    // 使能PWM发生器
    PWMGenEnable(PWM1_BASE, PWM_GEN_2);

 

}

//*****************************************************************************
//
// 向UART发送字符.
//
//*****************************************************************************
void
UARTSend(const uint8_t *pui8Buffer, uint32_t ui32Count)
{
    //
    // 有字符需要发送就循环
    //
    while(ui32Count–)
    {
        //
        // 向UART写入字符
        //
        UARTCharPutNonBlocking(UART0_BASE, *pui8Buffer++);
    }
}

//*****************************************************************************
//
//PWM初始化
int
PWMInit (void)
{
     //
     // PWM不分频
     //
     SysCtlPWMClockSet(SYSCTL_PWMDIV_1);

     GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_2|GPIO_PIN_3);//配置2,3管脚为输出

     //配置PF0,PF1分别为M1PWM4,M1PWM5
     GPIOPinConfigure(GPIO_PF0_M1PWM4);

     GPIOPinConfigure(GPIO_PF1_M1PWM5);

     // 配置PF0,PF1为PWM的输出管脚
     GPIOPinTypePWM(GPIO_PORTF_BASE, GPIO_PIN_0|GPIO_PIN_1);

     //
     // Configure the PWM1 to count down without synchronization.
     //配置GEN2递减计数模式不同步模式
     PWMGenConfigure(PWM1_BASE, PWM_GEN_2,
                     PWM_GEN_MODE_DOWN | PWM_GEN_MODE_NO_SYNC);

     //设置PWM周期

     PWMGenPeriodSet(PWM1_BASE, PWM_GEN_2,100);
     //设置PWM占空比
     PWMPulseWidthSet(PWM1_BASE, PWM_OUT_4, 1);

     PWMPulseWidthSet(PWM1_BASE, PWM_OUT_5, 1);
     //使能PWM输出状态
     PWMOutputState(PWM1_BASE, PWM_OUT_4_BIT| PWM_OUT_5_BIT, true);

     GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_2, 0x1<<2);//H2管脚置高  对应RESETAB

     GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_3, 0x1<<3);//H3管脚置高 对应RESETCD

     //
     // 使能PWM发生器
     PWMGenEnable(PWM1_BASE, PWM_GEN_2);
     return(0);
}
//********************************************************************
//UART0初始化
int UART0Int(void)
{
    GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);

    //
    // Configure the UART for 115,200, 8-N-1 operation.
    //
    UARTConfigSetExpClk(UART0_BASE, SysCtlClockGet(), 115200,
                             (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
                              UART_CONFIG_PAR_NONE));
    //
    // 提示输入数据
    //
    UARTSend((uint8_t *)"Enter text: ", 12);
    return(0);

}
//
//*****************************************************************************
//主函数
int
main(void)
{

    //
    //设置时钟周期为16MHZ
    //
   SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
                       SYSCTL_XTAL_16MHZ);

    //
    //使能用到的外设
    //
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);//使能B端口,PB2、PB3分别对应RESET_AB,RESET_CD
    SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM1); //使能M1PWM外设
    //
    // Enable processor interrupts.
    PWMInit();
    UART0Int();
    //
    IntMasterEnable();

    //
    // 使能UART0中断
    //
    IntEnable(INT_UART0);
    UARTIntEnable(UART0_BASE, UART_INT_RX | UART_INT_RT);

    // 循环等待UART0中断
    //
    while(1)
    {
    }
}
想用UART接收的数据调节占空比,没成功感觉 j=UARTCharGetNonBlocking(UART0_BASE);//接收串口数据
有问题但是不知道怎么改正

Michael Sun:

建议分开进行调试,先把串口接收调通了,再去用接收值去调整PWM的占空比。

可以再串口中断服务程序中把   j=UARTCharGetNonBlocking(UART0_BASE);//接收串口数据 去掉,再下面的判断中把串口的值赋给j,

这样你的串口会把收到的值再发回去,这样可以判断接收是否正确。

赞(0)
未经允许不得转载:TI中文支持网 » UART接收数据
分享到: 更多 (0)