完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我目前正在开发一个涉及 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个回答
|
|
从您的描述中,我了解到您正在使用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通信的问题。如果您在尝试这些解决方案后仍然遇到问题,请提供更多详细信息,以便我能更好地帮助您。 |
|
|
|
只有小组成员才能发言,加入小组>>
请教个XMC1404调试串口接收时为什么一直无法接收数据的问题
358 浏览 0 评论
TLE9879_BLDC电机启动需要用手拨一下才能转动,怎么解决?
6223 浏览 2 评论
4103 浏览 9 评论
请问TLE5012B_E1000 启动后为什么位置不能正确获取
3629 浏览 9 评论
1229 浏览 8 评论
455浏览 2评论
268浏览 2评论
374浏览 2评论
TLE9879_BLDC电机启动需要用手拨一下才能转动,怎么解决?
6240浏览 2评论
如果是打开已有的dave工程,怎么查看这个工程选择的mcu型号?
452浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 10:30 , Processed in 0.677768 second(s), Total 82, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号