STM32/STM8技术william hill官网
直播中

Krvice

4年用户 8经验值
擅长:MEMS/传感技术 测量仪表 嵌入式技术
私信 关注

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

本帖最后由 Krvice 于 2021-2-20 20:55 编辑

用了很多方法检测但还是不能解决问题

采用的单片机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 );
}

回帖(10)

加勒比海带思

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

阿信509

2020-12-18 11:37:26
最好找个现成的程序试验,自己编的往往会有错误
1 举报
  • Krvice: 相同的程序在最小系统板上试过,都是没问题的

tangchao86

2020-12-18 13:53:35
硬件是不是有问题,打一下电压这些
3 举报
  • Krvice: 前前后后已经测试了五六块板子了,每一块都是同样的问题,而且单片机自己烧写一些小程序都没问题,CH340C飞线接RXD和TXD电脑自发自收也能做到。看了很多别人的开发板原理图串口ISP这部分也没什么区别
  • tangchao86 回复 Krvice: 你最小系统板能执行,说明软件肯定没有任何问题。
  • Krvice 回复 tangchao86: 嗯,但是硬件方面检查了单片机,CH340C芯片都没问题,原理图方面也参考了很多别人的也没什么区别,所以很诧异,不知道问题到底在哪里

龚正

2020-12-25 16:52:23
电脑上的驱动有没有装?
1 举报
  • Krvice: 都是在最小系统板上测试过的,都没问题。到了自己板子上就不行了

h1654156033.3606

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

h1654156033.3606

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

langrous

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

加勒比海带思

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

张飞实战电子张角

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

蒋国青

2021-5-18 16:16:39
我一直被串口通讯困扰,谢谢楼主分享。。。。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分