This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] tm4c123

Guru**** 1797640 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/575572/tm4c123

我可以使用 UARTCharsAvail (UART0_BASE)在包含其他球面效果的项目中接收数据。

请注意、我可以通过 UART 发送数据、但函数 UARTCharsAvail (UART0_BASE)不起作用。

我已经使用 TIvaware 技术讲座的实验12测试了 UART 连接。 *(它工作得很好、)

这是代码的一部分

while (seguro=1)//这是程序的主循环

if (UARTCharsAvail (UART0_BASE)) UARTCharPut (UART0_BASE、UARTCharGet (UART0_BASE));

qePosition = QEIPositionGet (QEI0_BASE);
while (qePosition >100 & qePosition <10000){
qePosition = QEIPositionGet (QEI0_BASE);
qeDirection = QEIDirectionGet (QEI0_BASE);
qeiVelocity = QEIVelocityGet (QEI0_BASE);

//UARTCharPut (UART0_BASE、'$');
//UARTCharPut (UART0_BASE、"、");
UART_OutUDec (qePosition);
UARTCharPut (UART0_BASE、"、");
if (qeDirection<0){UARTCharPut (UART0_BASE、'-');

//if (qeDirection >0){UARTCharPut (UART0_BASE、'+');
//}
//UARTCharPut (UART0_BASE、"、");
UART_OutUDec (qeVelocity);
//UARTCharPut (UART0_BASE、"@");
UARTCharPut (UART0_BASE、'\n');
UARTCharPut (UART0_BASE、'\r\n');


SysCtlDelay (1333333);//(Sec*100);// 1 msec=400可执行次数,msec *100 =0.1秒
}//fin de while
//PWMOutputState (PWM0_BASE、PWM_OUT_1_BIT | PWM_OUT_0_BIT、false);

Seguro=0;

包括其它外设。

一  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    布宜诺斯艾利斯 días Ruben
    您的帖子上不清楚您的问题是什么。
    同时,我建议您在中断中处理 UART 接收代码,而不要在主 while ()循环中处理。 如果每个循环只检查一次 UART Rx 缓冲器、并且为每个周期添加延迟、则会出现更多问题-如果您有许多字符进入、则会快速释放延迟期间未处理的已接收字节。
    查看 Tivaware 的中断示例并阅读有关中断的一些基础知识、它将使您的 MCU 更好地工作。
    Saludos
    布鲁诺
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回复 Bruno,在使用或不使用 UART 中断的两种情况下都出现了问题。 在我的代码中、如果我通过 UART 接收到一些内容、我需要为计时器中断星号。 因此、我将 timerEnable 函数放在 while 循环中(我在具有相同结果的 UART 内部进行了尝试[如果我将计时器使能中断放在 UART 内部处理程序中])。
    请注意、UART 可以发送但不接收、并且计时器启用功能不起作用

    while (true)//这是程序的主循环


    if (UARTCharsAvail (UART0_BASE)){UARTCharPut (UART0_BASE、UARTCharGet (UART0_BASE)));
    TimerEnable (TIMER0_BASE、TIMER_A);//这似乎是问题所在




    我将包含代码的简化版本
    #include
    #include
    #include "inc/hw_gpio.h"
    #include "inc/hw_types.h"
    #include "inc/hw_ints.h"
    #include "inc/hw_memmap.h"
    #include "driverlib/sysctl.h"
    #include "driverlib/pin_map.h"
    #include "driverlib/gpio.h"
    //#include "driverlib/QEI.h"
    #include "driverlib/uart.h"
    #include "driverlib/interrupt.h"
    #include "driverlib/timer.h"
    //#include "driverlib/pwm.h"
    //#include "serial.h"


    int main (void){

    uint32_t ui32Period;
    //将时钟设置为直接从晶体运行。//400/2*4=50MHz
    SysCtlClockSet (SYSCTL_SYSDIV_4|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHz|SYSCTL_OSC_MAIN);

    //配置 UART
    SysCtlPeripheralEnable (SYSCTL_Periph_UART0);
    SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
    GPIOPinConfigure (GPIO_PA0_U0RX);
    GPIOPinConfigure (GPIO_PA1_U0TX);
    GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1);
    UARTConfigSetExpClk (UART0_BASE、SysCtlClockGet ()、9600、
    (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
    UART_CONFIG_PAR_NONE));



    //配置计时器中断
    ui32Period =(SysCtlClockGet ()/100)/2;//100赫兹
    TimerLoadSet (TIMER0_BASE、TIMER_A、ui32Period -1);
    IntEnable (INT_TIMER0A);
    TimerIntEnable (TIMER0_BASE、TIMER_TINA_TIMEOUT);
    IntMasterEnable();

    while (true)//这是程序的主循环


    if (UARTCharsAvail (UART0_BASE)){UARTCharPut (UART0_BASE、UARTCharGet (UART0_BASE)));
    TimerEnable (TIMER0_BASE、TIMER_A);






    void Timer0IntHandler (void){
    //清除计时器中断
    TimerIntClear (TIMER0_BASE、TIMER_TINA_TIMEOUT);
    //读取 GPIO 引脚和的当前状态
    //写回相反的状态


    IF (GPIOPinRead (GPIO_PORTF_BASE、GPIO_PIN_2))

    GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3、0);

    其他

    GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_2、4);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Ruben、
    我建议您将代码的不同功能拆分为"迷你程序"、直到您单独使用。
    本论坛上的大多数学员都无法逐行检查您的代码-我可以向您保证、计时器和 GPIO int 的函数能够完美地工作、 这是一个程序结构上的东西-你最好的办法是一次创建你的 Frankenstein 一个肢体。
    布鲁诺