完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我目前正在尝试使用内置的 UART 组件传输数据 CY8C5888Lti-LP097。UART配置为半双工模式,速率为 9600 Bd,数据位为 8,偶校验。我的代码如下所示:
uint8transmitData(char* message,charlen){ //CyGlobalIntDisable; UART_2_LoadTxConfig(); for(inti=0; iwhile((UART_2_ReadTxStatus() UART_2_TX_STS_COMPLETE)!=UART_2_TX_STS_COMPLETE); UART_2_LoadRxConfig(); //CYGlobalIntEnable; 返回 0;}int main(void){ CyGlobalIntEnable;/* 启用全局中断。*/ UART_1_Start(); UART_1_LoadTxConfig(); charmessage[] = {0x12, 0x13,0x14, 0x02, 0x00, 0x39,0x07,0xFF,0xFA,0x50}; for(;;) { transmitData(message,10); CyDelay(50); }}我的问题是,使用此代码只能传输 4 message 字节。 结果输出为: {0x50,0x13,0x14,0x02} ,然后是 50ms 的延迟(根据连接到输出引脚的逻辑分析仪的结果)。 仅使用 TX 模式,传输工作与预期的一样。 但我注意到,PSoC 启动后的第一次传输看起来就像上述输出一样,这可以通过移动 transmitData() 前的 50ms 延迟来解决。 因此,我认为我的问题与 UART_LoadTx()需要相当长的时间才能正确设置 TX 模式有关。 另一方面, UART_LoadTx() 函数的文档明确指出: 描述 以 半双工模式加载发射机 配置 。调用此 函数 后 ,UART 已 准备 好 传输数据。 它还指出我必须确保前一个事务已经完成,我想我已经做到了(因为 PutChar() 函数应该是阻塞的,而我在等待最后一个字节的完成)。 |
|
相关推荐
1个回答
|
|
sp; CyGlobalIntDisable(); // 禁用全局中断
UART_2_Start(); // 启动 UART 组件 UART_2_LoadTxConfig(); // 加载 UART 发送配置 UART_2_LoadRxConfig(); // 加载 UART 接收配置 char message[] = "Hello, World!"; char len = sizeof(message) - 1; uint8 transmitData(char* message, char len){ // 禁用全局中断 CyGlobalIntDisable(); // 加载 UART 发送配置 UART_2_LoadTxConfig(); // 循环发送数据 for(int i = 0; i < len; i++){ while((UART_2_ReadTxStatus() & UART_2_TX_STS_COMPLETE) != UART_2_TX_STS_COMPLETE); UART_2_WriteTxData(*(message + i)); } // 加载 UART 接收配置 UART_2_LoadRxConfig(); // 启用全局中断 CyGlobalIntEnable(); return 0; } int main(void){ // 初始化系统和组件 CyGlobalIntDisable(); CyDelay(1000); // 等待 1000ms CyGlobalIntEnable(); // 调用发送数据函数 transmitData(message, len); for(;;) { // 主循环中的其他代码 } } ``` 这段代码首先初始化系统和组件,然后调用 `transmitData` 函数发送数据。在 `transmitData` 函数中,我们首先禁用全局中断,加载 UART 发送配置,然后循环发送数据。在发送每个字符之前,我们检查 UART 是否已经完成发送上一个字符,然后写入新的字符。发送完所有字符后,加载 UART 接收配置,最后启用全局中断。 |
|
|
|
只有小组成员才能发言,加入小组>>
TLE9879_BLDC电机启动需要用手拨一下才能转动,怎么解决?
5590 浏览 2 评论
4083 浏览 9 评论
请问TLE5012B_E1000 启动后为什么位置不能正确获取
3596 浏览 9 评论
1208 浏览 8 评论
3502 浏览 7 评论
419浏览 2评论
251浏览 2评论
358浏览 2评论
TLE9879_BLDC电机启动需要用手拨一下才能转动,怎么解决?
5592浏览 2评论
如果是打开已有的dave工程,怎么查看这个工程选择的mcu型号?
422浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-29 17:44 , Processed in 0.720720 second(s), Total 81, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号