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

stm32f042f6 UART2无法使用

[复制链接]
include 提问时间:2019-2-20 16:48 /
阅读主题, 点击返回1楼
收藏 评论18 发布时间:2019-2-20 16:48
18个回答
include 回答时间:2019-2-20 18:10:04
freeelectron 发表于 2019-2-20 17:51
用usart2默认的io口试试,先不要用重映射的

试了,不行
wenyangzeng 回答时间:2019-2-20 19:11:42
include 发表于 2019-2-20 17:29
并不是,偶校验是项目需要,去掉也无法工作

那应该检查一下USART2的通讯对象的硬件连接情况
jeffhe1 回答时间:2019-2-21 08:48:13
GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_1);     //Tx
GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,GPIO_AF_1);    //Rx

有確認是  GPIO_AF_1 嗎?  GPIO_PinSource2 , GPIO_PinSource3 有 define?  
include 回答时间:2019-2-21 09:01:10
jeffhe1 发表于 2019-2-21 08:48
GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_1);     //Tx
GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,G ...

这个是stm32f0gpio.h里面的定义

  1. /**
  2.   * @brief  AF 0 selection
  3.   */
  4. #define GPIO_AF_0            ((uint8_t)0x00) /* WKUP, EVENTOUT, TIM15, SPI1, TIM17,
  5.                                                 MCO, SWDAT, SWCLK, TIM14, BOOT,
  6.                                                 USART1, CEC, IR_OUT, SPI2 */
  7. /**
  8.   * @brief  AF 1 selection
  9.   */
  10. #define GPIO_AF_1            ((uint8_t)0x01) /* USART2, CEC, Tim3, USART1, USART2,
  11.                                                 EVENTOUT, I2C1, I2C2, TIM15 */
  12. /**
  13.   * @brief  AF 2 selection
  14.   */
  15. #define GPIO_AF_2            ((uint8_t)0x02) /* TIM2, TIM1, EVENTOUT, TIM16, TIM17 */
  16. /**
  17.   * @brief  AF 3 selection
  18.   */
  19. #define GPIO_AF_3            ((uint8_t)0x03) /* TS, I2C1, TIM15, EVENTOUT */
复制代码
include 回答时间:2019-2-21 09:01:52
wenyangzeng 发表于 2019-2-20 19:11
那应该检查一下USART2的通讯对象的硬件连接情况

硬件确认了,是联通的
jeffhe1 回答时间:2019-2-21 09:07:12
你是使用標準庫嗎 ? 是的話 應該可以用這個函式 看看

void USART_SendData(USART_TypeDef* USARTx, uint16_t Data)
{
  /* Check the parameters */
  assert_param(IS_USART_ALL_PERIPH(USARTx));
  assert_param(IS_USART_DATA(Data));
   
  /* Transmit Data */
  USARTx->TDR = (Data & (uint16_t)0x01FF);
}

我有用過 STM32F051 是可用的 , 應該都是同為 M0系列

不然你可以把代碼整包載上來看看 , 看看有哪位大神剛好有時間可以試看看
include 回答时间:2019-2-21 09:17:35
jeffhe1 发表于 2019-2-21 09:07
你是使用標準庫嗎 ? 是的話 應該可以用這個函式 看看

void USART_SendData(USART_TypeDef* USARTx, uint16 ...

感谢你的耐心帮助,你这个程序发送的是uint16的数据?是不是还有数据处理的代码没有贴上?
jeffhe1 回答时间:2019-2-21 09:43:31
沒有 , 你可以直接填一個 byte , 我都直接這樣送

/*****************  发送一个字符 **********************/
void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch)
{
        /* 发送一个字节数据到USART */
        USART_SendData(pUSARTx,ch);
               
        /* 等待发送数据寄存器为空 */
        while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);       
}
include 回答时间:2019-2-21 17:10:16
问题已经解决了,原因是同事在另一个地方调用了PA2、3。还遇到一个问题,STM32单片机串口如果打开校验就必须把数据位改成9位,否则发送的数据最高位是错的
12

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版