英飞凌
直播中

何夏庄

7年用户 871经验值
私信 关注

求助,关于使用ModusToolbox进行PSoC6开发的疑问求解

我目前正在开发一个涉及 PSoC6 微控制器并使用 Modustoolbox 开发环境的项目。 我遇到了一些技术问题,希望您能协助解决,以确保我的项目顺利进行。

我正试图使用作为工具箱一部分提供的 HAL 库,通过 GPIO 引脚实现两个微控制器之间的 UART 通信。 我使用"cyhal_uart_write"函数成功传输了一个数据数组。 但是,当我尝试使用"cyhal_uart_read "函数接收数据时, ,我遇到了一些问题。 在接收部分,我没有使用任何中断。 我的项目的主要脚本附在下面。

/***************************** xml-ph-0000@deepl.internal ****************************** xml-ph-0001@deepl.internal ********************

****************************** xml-ph-0000@deepl.internal ****************************** xml-ph-0001@deepl.internal *******************/
#include"rtc.h"
#include"rtc.h"

/***************************** xml-ph-0000@deepl.internal ****************************** xml-ph-0001@deepl.internal ********************
* 全局变量
****************************** xml-ph-0000@deepl.internal ****************************** xml-ph-0001@deepl.internal *******************/
#defineDATA_BITS_8 8
#defineSTOP_BITS_1 1
#defineBAUD_RATE 115200
#defineUART_DELAY 10u
#defineRX_BUF_SIZE 4
#defineTX_BUF_SIZE 4

/***************************** xml-ph-0000@deepl.internal ****************************** xml-ph-0001@deepl.internal ********************
* 函数名称:主函数
****************************** xml-ph-0000@deepl.internal ****************************** xml-ph-0001@deepl.internal *********************
* 摘要:
* 这是 CPU 的主要功能。 它...
* 1.
* 2.
*
* 参数:
* 无效
*
* 返回:
* int
*
****************************** xml-ph-0000@deepl.internal ****************************** xml-ph-0001@deepl.internal *******************/
int main(void)
{
wwd_result_t result;
cyhal_uart_tuart_obj;
uint32_t ocp_cur;
uint8_ttx_buf[TX_BUF_SIZE] = { '1', '2','3','4'};
uint8_trx_buf[RX_BUF_SIZE];
size_t tx_length = TX_BUF_SIZE;
size_trx_length = RX_BUF_SIZE;
uint32_tvalue ='A';

// 初始化 UART 配置结构
const cyhal_uart_cfg_tuart_config =
{
.data_bits = DATA_BITS_8、
.stop_bits = STOP_BITS_1、
.parity =CYHAL_UART_PARITY_NONE、
.rx_buffer = rx_buf、
.rx_buffer_size = RX_BUF_SIZE
};


#ifdefined (CY_DEVICE_SECURE)
cyhal_wdt_t wdt_obj;

/* 清除 看门狗定时器,使其不会触发复位 */
result = cyhal_wdt_init( wdt_obj, cyhal_wdt_get_max_timeout_ms());
CY_ASSERT(CY_RSLT_SUCCESS == result);
cyhal_wdt_free( wdt_obj);
#endif

/* 初始化设备和电路板外设 */
result = cybsp_init();

// 初始化 UART 块
result = cyhal_uart_init( uart_obj,CYBSP_DEBUG_UART_TX,CYBSP_DEBUG_UART_RX,NC,NC,NULL、
uart_config);

// 设置波特率
result = cyhal_uart_set_baud( uart_obj, BAUD_RATE, actualbaud);

/* 板 启动失败。停止程序执行 */
如果(result != CY_RSLT_SUCCESS)
{
CY_ASSERT(0);
}

/* 启用全局中断 */
__enable_irq ();

为(;;)
{
// 开始 Tx传输
cyhal_uart_write( uart_obj,(void*)tx_buf, tx_length);
cyhal_system_delay_ms(UART_DELAY);

// 开始 Rx传输
cyhal_uart_read( uart_obj,(void*)rx_buf, rx_length);
cyhal_system_delay_ms(UART_DELAY);
}
}

在调试这段代码时,执行在'cyhal_uart_read'处暂停。cyhal_uart_read函数处暂停执行。我遇到的确切错误如下:

由于这个错误,我无法继续操作。 我无法准确接收我传送的数据。


回帖(1)

余温重顾

2024-6-3 16:32:53
从您的描述中,我了解到您正在使用ModusToolbox开发环境和PSoC6微控制器进行UART通信。您已经成功地使用`cyhal_uart_write`函数发送了数据,但在尝试使用`cyhal_uart_read`函数接收数据时遇到了问题。以下是一些建议和解决方案,希望能帮助您解决问题。

1. 确保UART配置正确:在开始读取数据之前,请确保您的UART配置正确。这包括波特率、数据位、停止位和奇偶校验位等参数。您可以在ModusToolbox中检查这些设置,确保它们与发送端的设置相匹配。

2. 检查GPIO引脚分配:确保您已经正确地将GPIO引脚分配给UART的TX和RX功能。在ModusToolbox的Pinout视图中,您可以查看和修改引脚分配。

3. 使用超时机制:由于您没有使用中断,建议您在`cyhal_uart_read`函数中使用超时机制。这可以确保在没有数据接收时,程序不会无限期地等待。以下是一个示例代码片段:

```c
uint32_t timeout = 1000; // 设置超时时间为1000毫秒
uint32_t start_time = cyhal_system_timer_get_value();
uint32_t num_bytes_read = 0;

while (num_bytes_read < data_length) {
    num_bytes_read = cyhal_uart_read(uart_obj, data_buffer, data_length, timeout);
    if (cyhal_system_timer_get_value() - start_time > timeout) {
        // 超时处理
        break;
    }
}
```

4. 检查数据缓冲区大小:确保您的接收缓冲区足够大,以容纳预期接收的数据。如果缓冲区太小,可能会导致数据丢失。

5. 检查数据流控制:如果您的UART配置中启用了硬件或软件流控制,请确保正确处理这些流控制信号。否则,可能会导致数据接收失败。

6. 使用调试工具:使用ModusToolbox的调试工具(如CySwDTrace或CyEmulator)来监控UART通信。这可以帮助您确定问题所在,例如数据是否正确发送和接收。

7. 检查代码逻辑:仔细检查您的代码逻辑,确保在发送和接收数据时没有逻辑错误。例如,确保在发送数据后等待足够的时间,以便接收端可以接收到数据。

8. 更新ModusToolbox和HAL库:确保您使用的ModusToolbox和HAL库是最新版本。有时,旧版本的库可能存在已知的问题,这些问题在新版本中已经得到解决。

希望这些建议能帮助您解决UART通信的问题。如果您在尝试这些解决方案后仍然遇到问题,请提供更多详细信息,以便我能更好地帮助您。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分