UART接收问题

2019-08-03 17:19发布

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);//接收串口数据
有问题但是不知道怎么改正
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
dirtwillfly
1楼-- · 2019-08-03 23:00
好长的代码
dirtwillfly
2楼-- · 2019-08-04 01:34
 精彩回答 2  元偷偷看……
yjz101
3楼-- · 2019-08-04 04:22
远程控制PWM,……
elecintop
4楼-- · 2019-08-04 04:48
好长的代码。。。
1462014620
5楼-- · 2019-08-04 05:44
请问我同样的配置了UART1 ,不知为何无法发送。

一周热门 更多>