你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F407 UART发不出数据

[复制链接]
RexZheng-202302 提问时间:2014-10-28 20:27 /
我用的是PC10和PC11的UART3,配置代码如下:
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_USART3);
GPIO_PinAFConfig(GPIOC, GPIO_PinSource11, GPIO_AF_USART3);
  /* Configure USART Tx as alternate function  */
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOC, &GPIO_InitStructure);
  /* Configure USART Rx as alternate function  */
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
  GPIO_Init(GPIOC, &GPIO_InitStructure);

USART_InitStructure.USART_BaudRate =9600; //波特率
USART_InitStructure.USART_WordLength = USART_WordLength_8b; //8 位数据
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; // 发送/接收使能
  /* Configure and enable the USART */
  USART_Init(USART3, &USART_InitStructure);
  /* Enable the USART Receive interrupt */
  USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
USART_Cmd(USART3, ENABLE);
  /* Enable USART Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);

结果
    USART_SendData(USART3, *(Buf + i) );
    while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
就一直停在这里了,TXE不置位,USART3的DR寄存器一直位0。不知道是什么原因

收藏 评论12 发布时间:2014-10-28 20:27

举报

12个回答
Eagleson 回答时间:2014-10-28 21:27:58
给你一个参考 也是用的USART3

usart.rar

下载

895.98 KB, 下载次数: 586, 下载积分: ST金币 -1

回答时间:2014-10-29 09:36:20
没有开启发送中断,查询的应该是发送缓冲区的标志位是否为1,如果为1说明数据没有发送出去,为0说明数据发送成功,缓冲区被清空。另外,楼主可以用电脑接收一下是否有数据发送出去。
RexZheng-202302 回答时间:2014-10-29 11:16:11
谢谢,用这个程序是可以的,但我把配置设置成完全一样了,我自己这边还是不行。并且用我自己的配置放到这个程序里UART也是工作正常的。不清楚怎么回事了。不知和我用了FSMC和USB接口是不是有关,但我已经把相关调用的函数都屏蔽了。就只剩UART功能了,还是不行,郁闷啊
Eagleson 回答时间:2014-10-30 11:53:41
RexZheng-202302 发表于 2014-10-29 11:16
谢谢,用这个程序是可以的,但我把配置设置成完全一样了,我自己这边还是不行。并且用我自己的配置放到这 ...

还是不行??
RexZheng-202302 回答时间:2014-11-2 19:33:55
安 发表于 2014-10-29 09:36
没有开启发送中断,查询的应该是发送缓冲区的标志位是否为1,如果为1说明数据没有发送出去,为0说明数据发 ...

但是我不用中断发送的,查询发送。while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);这个也是例程里的,当把数据送缓冲区时TXE应该置1,然后发送完了变0. 但是我数据送缓冲区后TXE不会置位。用示波器测试实际也没有数据发出
RexZheng-202302 回答时间:2014-11-2 19:34:57

时的,单独用你的例程是可以的。放到我的程序里去就不行了
RexZheng-202302 回答时间:2014-11-2 19:35:52
并且我另一个项目里用的STM32F405的USART也不行。同样的问题。
RexZheng-202302 回答时间:2014-11-2 19:37:18

USART配置和其他配置是不是要有先后顺序啊?
Eagleson 回答时间:2014-11-3 08:35:04
RexZheng-202302 发表于 2014-11-2 19:37
USART配置和其他配置是不是要有先后顺序啊?

不应该有先后顺序的,你检查一下看是不是后面的配置把什么关了,引起串口通信失败的
12下一页
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版