完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
所以我在 ESP32 和 AVR 芯片之间使用 UART 通信。TX响应率有问题。
AVR 发送 5 个字节,前两个是命令字节,后 3 个是数据字节: 代码:全选 //command Serial2.write(0x01); Serial2.write(0x62); //data Serial2.write(0x69); //high byte Serial2.write(0x70); //low byte Serial2.write(0x71); //data delayMicroseconds(150); 在 ESP 端,它使用 RX 中断获取数据并将其存储到另一个缓冲区,并使用 xTaskResumeFromISR 对接收到的数据执行某些操作: 代码:全选 static void IRAM_ATTR uart_intr_handle(void *arg) { uint16_t i = 0; uint16_t rx_fifo_len = 0; rx_fifo_len = UART1.status.rxfifo_cnt; // read number of bytes in UART buffer while(rx_fifo_len){ rxbuf[i++] = UART1.fifo.rw_byte; // read all bytes if(rxbuf == 0x01 && rxbuf[i+1] == 0x62){ dataBuff[0] = rxbuf[i + 2]; dataBuff[1] = rxbuf[i + 3]; dataBuff[2] = rxbuf[i + 4]; xTaskResumeFromISR(xHandle); } if(rxbuf == 0x02 && rxbuf[i+1] == 0x63){ // xTaskResumeFromISR(xHandle2); } rx_fifo_len--; } uart_clear_intr_status(EX_UART_NUM, UART_RXFIFO_FULL_INT_CLR|UART_RXFIFO_TOUT_INT_CLR); } 这是处理数据的函数: 代码:全选 void task(void *arg){ while(1){ char writeAddress[6]; uint16_t tempAddress = dataBuff[1] | (dataBuff[0]<<8); uint8_t writeData = dataBuff[2]; sprintf(writeAddress, "%d", tempAddress); ESP_LOGE("uart", "Address: %s, %x", writeAddress, writeData); //not implemented yet, but here is where data will be stored into esp nvs //and send 0x01 back to AVR so it knows that datas has been stored succesfully uart_write_bytes(EX_UART_NUM, &txDataBuff[1], 1); vTaskSuspend(NULL); } } 我得到的数据是正确的,这里是 ESP_LOGE 的一瞥: 代码:全选 E (2290198) uart: Address: 26992, 71 E (2290198) uart: Address: 26992, 71 E (2290208) uart: Address: 26992, 71 E (2290208) uart: Address: 26992, 71 E (2290218) uart: Address: 26992, 71 E (2290218) uart: Address: 26992, 71 所以我的问题是 uart_write_bytes() 大约需要 5 毫秒(所以这也意味着函数需要 5 毫秒才能完成? ) :只需发送每 ~30 个数据包。 我假设它与恢复任务需要多长时间有关,或者另一个任务正在中断此任务? 我怎样才能增加响应时间? 您的回复将不胜感激 |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
2135个成员聚集在这个小组
加入小组我的项目我做主,使用GN+Ninja来完成构建系统(VSCode开发RT106X)
37376 浏览 0 评论
NXP IMX8应用处理器快速入门必备:技巧、使用、设计指南
6775 浏览 1 评论
7793 浏览 1 评论
7642 浏览 0 评论
NXP i.MX6UL开发板(linux系统烧录+规格+硬件+模块移植)使用手册
5071 浏览 0 评论
1556浏览 2评论
关于NINA-W132 Wi-Fi模块SPI通信遇到的疑问求解
1208浏览 2评论
如何在MPC PowerPC MCU上首次刷写后禁用BDM?
749浏览 1评论
将HFREFR和LFREFR寄存器值设置为错误的值来将故障注入CMU,但CMU_ISR值始终为零,为什么?
735浏览 1评论
将SPSDK for FRDM-MCX-W71 SDK与VS一起安装时出现hidapi构建错误怎么解决?
678浏览 1评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 05:42 , Processed in 0.702630 second(s), Total 70, Slave 53 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
502