发 帖  
原厂入驻New
[问答]

STM32F103串口通信无应答问题请教

2308 STM32 PCB CH340
分享
用了很多方法检测但还是不能解决问题

采用的单片机STM32F103C8T6,串口芯片CH340C

想通过CH340串口实现通信和ISP下载,但是测试中发现ISP下载串口无应答,并且串口通信程序通过SW烧写进去之后电脑也无法接收到数据,库函数编写的程序和CubeMX生成的程序都不行,同样的程序在最小系统板上都能够实现相应的功能。

把CH340C的TXD、RXD引脚飞线连接,再用电脑发送数据,这个时候是可以电脑是可以接收到数据的。

单片机如果烧写一下点灯程序,中断服务程序都是可以运行的,但是一到串口部分就会无应答

利用了LED灯检测串口程序运行状态显示,串口初始化部分可以正常执行,但是到了数据发送函数部分貌似就不能执行了。(在串口程序的每个部分后面加一个比较长的延时,延时后写一个点灯的小程序,点灯之后再加一个延时,保证LED变化可以比较容易的观察到)

原理图和串口程序如下
1608258138(1).png

#include "bsp_usart.h"

static void NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;

  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

  NVIC_InitStructure.NVIC_IRQChannel = debug_USART_IRQ;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}

void USART_Config(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;

        DEBUG_USART_GPIO_APBxClkCmd(DEBUG_USART_GPIO_CLK, ENABLE);
        DEBUG_USART_APBxClkCmd(DEBUG_USART_CLK, ENABLE);

        // USART Tx的GPIO配置
        GPIO_InitStructure.GPIO_Pin = DEBUG_USART_TX_GPIO_PIN;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(DEBUG_USART_TX_GPIO_PORT, &GPIO_InitStructure);

        // USART Rx的GPIO配置
        GPIO_InitStructure.GPIO_Pin = DEBUG_USART_RX_GPIO_PIN;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_Init(DEBUG_USART_RX_GPIO_PORT, &GPIO_InitStructure);
       
        // 配置串口参数
        USART_InitStructure.USART_BaudRate = DEBUG_USART_BAUDRATE;
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;
        USART_InitStructure.USART_StopBits = USART_StopBits_1;
        USART_InitStructure.USART_Parity = USART_Parity_No ;
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

        USART_Init(DEBUG_USARTx, &USART_InitStructure);

        NVIC_Configuration();
       
        USART_ITConfig(DEBUG_USARTx, USART_IT_RXNE, ENABLE);
       
        USART_Cmd(DEBUG_USARTx, ENABLE);
}

void Usart_SendByte(USART_TypeDef* USARTx, uint8_t data)
{
        USART_SendData(USARTx, data);
        while( USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET );
}

0
2020-12-18 10:41:09   评论 分享淘帖 邀请回答

相关问题

9个回答
最好找个现成的程序试验,自己编的往往会有错误
2020-12-18 11:37:26 1 评论

举报

1 条评论
硬件是不是有问题,打一下电压这些
2020-12-18 13:53:35 3 评论

举报

3 条评论
  • 2020-12-18 17:07

    前前后后已经测试了五六块板子了,每一块都是同样的问题,而且单片机自己烧写一些小程序都没问题,CH340C飞线接RXD和TXD电脑自发自收也能做到。看了很多别人的开发板原理图串口ISP这部分也没什么区别

    唐超 回复 旭: 2020-12-25 16:48

    你最小系统板能执行,说明软件肯定没有任何问题。

    回复 唐超: 2020-12-28 21:17

    嗯,但是硬件方面检查了单片机,CH340C芯片都没问题,原理图方面也参考了很多别人的也没什么区别,所以很诧异,不知道问题到底在哪里

电脑上的驱动有没有装?
2020-12-25 16:52:23 1 评论

举报

1 条评论
  • 2020-12-28 21:18

    都是在最小系统板上测试过的,都没问题。到了自己板子上就不行了

路过学习,很实用,谢谢分享。
2020-12-29 14:28:38 评论

举报

路过学习,谢谢分享。
2020-12-30 12:32:37 评论

举报

路过学习,很实用,谢谢分享。
2021-1-3 11:59:27 评论

举报

不要用5V给CH340C供电,用3.3V试试。
2021-1-6 09:43:21 评论

举报

我之前也遇到过   同样STM32F103C8T6,最后发现CH340C需要使用和MCU同一电源供电才行
2021-1-6 09:45:22 评论

举报

您好,
①建议先把NRST和BOOT0两个管脚先正常接,看看通信是不是能够成功。如果可以的话,可能NRST和BOOT引脚这块的控制逻辑有问题。
②另外R8和R13这两个电阻取值有点大,换成51R看看。Rx端添加一个上拉电阻,如果外部添加不方便的话,可以通过芯片内部配置成若上拉。

撰写答案

你正在撰写答案

如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
我要提问
关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表