【紧急求助】STM32F407ZGT6的6个串口中串口1通了,但是3、6不通,相同代码,请高人指教

2019-07-20 23:57发布

本帖最后由 天山狐狸 于 2016-1-28 22:07 编辑

如题,我使用了407的6个串口,用外设库初始化的,但是现在1通,3、6不通,2、4、5还没有测试。

代码如下,串口1、3、6的代码基本相同,只是USARTx不通而已。6个串口的管脚分配是软件STM32CubeMX生成的。

[mw_shl_code=applescript,true]void USART1_Init(uint32_t BaudRate)
{
  USART_InitTypeDef USART_InitStructure;

  USART_InitStructure.USART_BaudRate = 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(USART1, &USART_InitStructure);//初始化串口

  USART_Cmd(USART1, ENABLE);//使能串口
  USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开相关中断
}


void USART3_Init(uint32_t BaudRate)
{
  USART_InitTypeDef USART_InitStructure;

  USART_InitStructure.USART_BaudRate = 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(USART3, &USART_InitStructure);//初始化串口

  USART_Cmd(USART3, ENABLE);//使能串口
  USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);//开相关中断
}[/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
天山狐狸
1楼-- · 2019-07-21 19:32
 精彩回答 2  元偷偷看……
天山狐狸
2楼-- · 2019-07-21 23:47
 精彩回答 2  元偷偷看……
天山狐狸
3楼-- · 2019-07-22 05:31
CEEEWA 发表于 2016-1-28 10:10
首先 你检查一下你的 每种时钟的定义是不是和源文件的一致。而且你在下面的那个中单的抢占优先级和响应优先 ...

问题已经找到,但不知怎么解决:

用示波器看波形发现:485使能发送已经打开了,但是串口数据却发不出去,,等到485使能发送都关闭了串口数据才发出去。
天山狐狸
4楼-- · 2019-07-22 11:17

程序和波形如下,数据滞后于485收发,,这个是怎么回事呢

[mw_shl_code=applescript,true]void USART3_SendString_A(uint8_t *Data)
{
  uint8_t *pBuf = Data;

  Enable_485Tx2;//使能485发送

  while (*pBuf)
  {
    USART3->DR = ((*pBuf) & (uint16_t)0x01FF);
    pBuf++;

    while (!(USART3->SR & 0x0040));
  }
  Enable_485Rx2;//默认到485接收
}[/mw_shl_code]

2016-01-28_115605.png
dalianlwd
5楼-- · 2019-07-22 16:42
既然是ZGT的芯片,一定用显示屏了,一定开启FSMC了,你看你的端口设置,串口3映射到FSMC的数据线上了,那几个还有映射到SD卡的线上了,能正常工作吗?我没试过,不敢妄下结论,但我要用,一定要避开这样的用法。
天山狐狸
6楼-- · 2019-07-22 21:26
dalianlwd 发表于 2016-1-28 12:02
既然是ZGT的芯片,一定用显示屏了,一定开启FSMC了,你看你的端口设置,串口3映射到FSMC的数据线上了,那几 ...

没有用FSMC,没有用SDIO呢

现在发现串口3的状态寄存器的TXE TC一直是1,这样就没等数据发完,485切到输入了

一周热门 更多>