完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我有一块装有 XMC1300 处理器的定制电路板,我想从 Uart 接收不同长度的信号。
使用 dave 开发工具,我配置了 Uart0 和 Uart1,并使用中断回调功能,启动 irq 时使用了 UART_StartReceiveIRQ( UART_1,Uart_Read,9); UART_StartReceiveIRQ( UART_0,Uart_Read,9); 并以 UART_Receive( UART_1,Uart_Read,9);或 UART_Receive( UART_0,Uart_Read,9); 如果我的字符串是 9 字节,所有函数都会执行。 凸轮如何实现接收长度可变的字符串? |
|
相关推荐
1个回答
|
|
要实现从 UART 接收不同长度的信号,您可以按照以下步骤操作:
1. 首先,确保您的 XMC1300 处理器的 UART 配置正确。在 DAVE 开发工具中,配置 UART0 和 UART1 的波特率、数据位、停止位和奇偶校验位。 2. 为了接收不同长度的信号,您需要修改 UART 接收中断回调函数。在回调函数中,您可以使用一个全局变量来存储接收到的数据,并计算接收到的数据长度。例如: ```c #define MAX_LENGTH 256 uint8_t received_data[MAX_LENGTH]; uint32_t received_length = 0; ``` 3. 修改 UART 接收中断回调函数 `Uart_Read`,以处理不同长度的数据: ```c void Uart_Read(UART_HandleType *handle, uint8_t *data, uint32_t length) { for (uint32_t i = 0; i < length; i++) { received_data[received_length] = data[i]; received_length++; } // 检查是否接收完毕 if (received_length >= expected_length) { // 处理接收到的数据 process_received_data(received_data, received_length); // 重置接收长度 received_length = 0; } } ``` 4. 在您的主函数中,启动 UART 接收中断。您可以使用 `UART_StartReceiveIRQ` 函数,并将接收长度设置为 1,这样每次接收到一个字节时都会触发中断: ```c UART_StartReceiveIRQ(UART_1, Uart_Read, 1); UART_StartReceiveIRQ(UART_0, Uart_Read, 1); ``` 5. 在 `process_received_data` 函数中,您可以根据实际应用场景处理接收到的数据。例如,您可以检查数据的结束标志,或者根据特定协议解析数据。 通过这种方式,您可以实现从 UART 接收不同长度的信号。每次接收到一个字节时,都会触发中断并调用 `Uart_Read` 函数。当接收到足够的数据时,您可以在 `process_received_data` 函数中处理数据。 |
|
|
|
只有小组成员才能发言,加入小组>>
TLE9879_BLDC电机启动需要用手拨一下才能转动,怎么解决?
5303 浏览 2 评论
4069 浏览 9 评论
请问TLE5012B_E1000 启动后为什么位置不能正确获取
3584 浏览 9 评论
1202 浏览 8 评论
3488 浏览 7 评论
402浏览 2评论
239浏览 2评论
349浏览 2评论
TLE9879_BLDC电机启动需要用手拨一下才能转动,怎么解决?
5305浏览 2评论
如果是打开已有的dave工程,怎么查看这个工程选择的mcu型号?
406浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 11:40 , Processed in 0.622563 second(s), Total 80, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号