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.

[参考译文] CCS/EK-TM4C123GXL:将 HC-06蓝牙连接到 TM4C123微控制器

Guru**** 2477065 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/685999/ccs-ek-tm4c123gxl-connecting-the-hc-06-bluetooth-to-the-tm4c123-microcontroller

器件型号:EK-TM4C123GXL
主题中讨论的其他器件:TM4C123

工具/软件:Code Composer Studio

嗨、大家好、

我已经学习了 TM4C123一段时间、并且在连接到不同的 UART 引脚时遇到了问题。 由于我尝试在同一控制器上运行 SensHub 和 HC-06、我受到了我可以连接到哪些引脚的限制、因此我尝试将 UART1示例移动到 UART3、并且在遵循工作簿和数据表的同时、我无法看到错误的位置。  

当使用 UART 1运行时、代码和输出为:

#include 
#include 

#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/GPIO.h"
#include "driverlib/interrupt.h"
#include "driverlib/pin_map.h"
#include "SysCtlSysCtl_SysSet.h





(SysCtl_sysctl


);#sysct1_sysctl (#sysctl 1)




GPIOPinConfigure (GPIO_PB0_U1RX);
GPIOPinConfigure (GPIO_PB1_U1TX);

GPIOPinTypeUART (GPIO_PORTB_BASE、GPIO_PIN_0 | GPIO_PIN_1);

UARTClockSourceSet (UART1_BASE、 UART_CLOCK_PIOSC);//16MHz 晶体示波器
UARTStdioConfig (1、38400、16000000);//端口1、波特率、 16MHz oscill



IntMasterEnable ();//启用处理器中断
IntEnable (INT_UART1);//启用 UART 中断
UARTIntEnable (UART1_BASE、UART_INT_RX | UART_INT_RT);//仅启用 RX 和 TX 中断

UARTCharPut (UART1_BASE、'E');
UART1_UART1_BASE (UART1_UART1_UART1_UART1_BASE);
"T");
UARTCharPut (UART1_BASE、"e");
UARTCharPut (UART1_BASE、"r");
UARTCharPut (UART1_base、');
UARTCharPut (UART1_base、'T');
UARTCharPut (UART1_base、 'e');
UARTCharPut (UART1_base、'x');
UARTCharPut (UART1_base、't');
UARTCharPut (UART1_base、':');
UARTCharPut (UART1_base、');


while (1)//let 中断处理程序执行 UART 回显函
数{
// if (UARTCharsAvail (UART0_BASE)) UARTCharPut (UART0_BASE、UARTCharGet (UART0_BASE));
}


void UARTIntHandler (void)
{
uint32_t ui32Status;

ui32Status = UART1_base、true



);
}UART1_中断/清除 UART1_BASE (UART1)
UARTCharPutNonBlocking (UART1_base、UARTCharGetNonBlocking (UART1_base));//echo 字符

}

但是、当尝试切换到 UART 3时、我不会获得任何输出。 代码为:

实际上、该版本似乎停留在第一个字符上。

#include 
#include 

#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/GPIO.h"
#include "driverlib/interrupt.h"
#include "driverlib/pin_map.h"
#include "SysCtlSysCtl_SysSet.h





(SysCtl_sysctl


);#sysct1_sysctl (#sysctol_sytl

)#include "sysct_sysctl (s_sysctl)


GPIOPinConfigure (GPIO_PC6_U3RX);
GPIOPinConfigure (GPIO_PC7_U3TX);

GPIOPinTypeUART (GPIO_PORTC_BASE、GPIO_PIN_6 | GPIO_PIN_7);

UARTClockSourceSet (UART3_base、 UART_CLOCK_PIOSC);//16MHz 晶体示波器
UARTStdioConfig (3、38400、16000000);//端口1、波特率、 16MHz oscill



IntMasterEnable ();//启用处理器中断
IntEnable (INT_UART3);//启用 UART 中断
UARTIntEnable (UART3_base、UART_INT_RX | UART_INT_RT);//仅启用 RX 和 TX 中断

UARTCharPut (UART3_base、'E');
UART3_PUt (UART3_base、UART3_BASE);
"T");
UARTCharPut (UART3_base、'e');
UARTCharPut (UART3_base、'r');
UARTCharPut (UART3_base、');
UARTCharPut (UART3_base、'T');
UARTCharPut (UART3_base、 'e');
UARTCharPut (UART3_base、'x');
UARTCharPut (UART3_base、't');
UARTCharPut (UART3_base、':');
UARTCharPut (UART3_base、');


while (1)//let 中断处理程序执行 UART 回显函
数{

}


void UARTIntHandler (void)
{
uint32_t ui32Status;

ui32Status = UART3_base

(UART3_base)

;while UART32_unt (UART32_base)、while (UART32_click)、/uchar)、while (uART32_base)、/uart/uart/uart/uchar (while)、while (uART32_base)、/uart/u

UARTCharPutNonBlocking (UART3_base、UARTCharGetNonBlocking (UART3_base));//echo 字符

}

感谢您的任何帮助或建议。

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

    您好 Kala、

    对于底部的示例、

    UARTStdioConfig (3、38400、16000000);//端口1、波特率、 16MHz 振荡器 

    该配置不正确。 该 API 的端口不能设置为3、只有0-2是可接受的输入。 这可能是该代码的问题。

    对于您最终希望使用的顶部示例、如果您暂停代码、是否会遇到任何 FaultISR? 如果是、您可能尚未在 startup_ccs.c 文件中将 ISR 从 UART3转移到 UART1。 这只是我根据最初介绍的内容进行的第一个猜测。

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

    您好、Ralph、

    好的、我将介绍 UARTStdioConfig。 我不知道它只适用于0-2。  不过、为了方便起见、是否有一个命令类似于 UART3的 UARTStdioConfig?

    我确实卡在 FaultISR 中、我对 startup_ccs.c 文件执行了一些操作、因此我进行了双击检查、并进行了 extern 调用:

    //用于外部中断
    的 Extern 声明 void UARTIntHandler (void); 


    我认为我正确地移动了 ISR 吗?

    IntDefaultHandler、 // UART0 Rx 和 Tx
    IntDefaultHandler、 // UART1 Rx 和 Tx 


    IntDefaultHandler、 // SSI2 Rx 和 Tx
    IntDefaultHandler、 // SSI3 Rx 和 Tx
    UARTIntHandler、 // UART3 Rx 和 Tx
    IntDefaultHandler、 // UART4 Rx 和 Tx
    IntDefaultHandler、 // UART5 Rx 和 Tx 


    谢谢、
    卡拉

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

    下面是我尝试实现的原理图的一部分、如果有用的话?

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

    端口3及更高版本没有任何其他命令、但您可以添加这些命令、如以下文章中所述: e2e.ti.com/.../1283926

    ISR 看起来确实已正确移动、实际上、我应该说过、如果您没有移动、您会登录 IntDefaultHandler。 不过、登录故障 ISR 是进行调试的非常好的线索。

    让我们重点介绍 UART1、因为这是您最终需要的。

    我使用 UART0测试了您的代码、使我可以在 PC 上查看控制台输出、并且设置没有问题。 您能否更改 startup_ccs.c 文件以反映 UART1设置、然后尝试运行该代码、看看是否使用它进入 FaultISR?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Ralph、

    很抱歉耽误你的时间、我的项目的 PWM 响应速度有问题、我必须修复、然后当我发现平衡机器人摆动过快时、我会收到垃圾读取、我仍在处理该问题。

    但谢谢、今天我有一些时间、浏览了您链接的页面、它很有魅力。 我已经更新了 uartstdio.c 文件、并且现在在示例代码中启用了 UART3、因此我应该知道如何立即在我的项目中实现它。

    请注意、因为我在编写示例时在 uart1和3之间跳转、询问 PPL 哪里有错误。 第二次返回 uart3时、我确实忘记了启动中的中断、我应该进入的错误循环是 IntDefaultHandler。

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

    我想补充一点、您对 UART 中断处理程序"UARTIntHandler"的命名可能过于宽泛。   (没有描述!)

    添加特定中断的数量(即"UARTIntHandler3")会产生更清晰的效果-当(其他)中断(甚至其他 UART)添加到您的'witches brew'时尤其重要。   (您不会以任何方式/手段与使用"非机器人"清扫器进行运输的人相似...)