STM32 USART3可以接收无法发送问题(Tx一直为高电平)

首先这个问题耗费了我比较多的时间来进行调试,比较郁闷;

1. 同时使用相同的函数进行了USART2和USART3的初始化配置, USART2工作正常, 中断服务程序的结构也是相同的, 收发都是正常的,没有发问题;

2. 使用USART3调试LCD时, 发现无法进行通信, 表现是Rx可以正常进行接收, Tx发送数据时一直为高电平, 使用示波器捕获不到任何波形;

3. 关于USART3的寄存器, GPIO的寄存器, USART3/GPIO/AFIO等时钟已经进行了配置, NVIC也进行了配置; 查看与USART2的差异,发现完全相同,没有差别, 但是无法发送.

4. 单独写了一个文件进行串口测试, 查询发送OK!

5. 将改单独文件内容复制到工程中(初始化完成后面), 相当于将初始化中关于USART部分进行了重新配置, 却发现不能进行发送了;

6. 锁定问题, 在硬件的初始化代码中有错误. 将初始化中各函数逐个注释以后, 发现问题在时钟配置函数中.

7. 最终锁定在

RCC_APB1PeriphClockCmd( RCC_APB1Periph_USART2 | RCC_APB1Periph_USART3 | RCC_APB1Periph_UART4  

                | RCC_APB1Periph_UART5 | RCC_APB1Periph_TIM3 | RCC_APB1Periph_TIM6  

                     | RCC_APB1Periph_TIM7 | RCC_APB1Periph_I2C1 | RCC_APB1Periph_I2C2, ENABLE);  

中,是的,问题就在这, RCC_APB1Periph_USART3 和 RCC_APB1Periph_I2C2! 我查阅了一下Pinouts and pin descriptions, 

发现I2C2和USART3共用一组引脚,  而我为图省事, 把这些个时钟都打开了...
这就导致了USART3的Tx引脚一直为高电平, 而正常无数据发送时, USART的Tx就是一直为高电平的,  所以无论我怎么发数据, 都检测不到波形了...下课!!!

永不止步步 发表于03-31 09:56 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67417个|学分:363791个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号