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

STM32F030R8 UART2中断不能接受数据

[复制链接]
詹姆斯阿鑫 提问时间:2014-9-17 19:08 /
STM32F030R8, PA2,3作为UART2,能发送,不能中断接收数据。
UART1是正常的。请高手看看哪里有问题? 中断函数在.s 中做了处理。
void UART1_GPIO_Configuration(void)
{     
 GPIO_InitTypeDef GPIO_InitStructure;  
 RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOA, ENABLE);
  GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_1);
  GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_1);
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
}

void USART1_Configuration(void)
{
 USART_InitTypeDef USART_InitStructure;
 NVIC_InitTypeDef  NVIC_InitStructure;
  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPriority = 2;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
 
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE );
  USART_InitStructure.USART_BaudRate = 9600;
  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_ITConfig(USART1, USART_IT_RXNE, ENABLE);
  USART_Cmd(USART1, ENABLE);
 
}

void USART1_IRQHandler(void)
{
 uint8_t r;
  if((USART1->ISR & USART_ISR_TC) == USART_ISR_TC)
  {
    USART1->ICR |= USART_ICR_TCCF;/* clear transfer complete flag */
  }
  else if((USART1->ISR & USART_ISR_RXNE) == USART_ISR_RXNE)
  {
    r = USART1->RDR;/* receive data, clear flag */
  USART_SendData(USART1, r);
  }
  else
  {
    NVIC_DisableIRQ(USART1_IRQn);/* Disable USART1_IRQn */
  }
}
extern void UART1_send_byte(uint8_t byte)
{
    while(!((USART1->ISR)&(1ISR & USART_ISR_TC) == USART_ISR_TC)
  {
    USART2->ICR |= USART_ICR_TCCF;/* clear transfer complete flag */
  }
  else if((USART2->ISR & USART_ISR_RXNE) == USART_ISR_RXNE)
  {
    r = USART2->RDR;/* receive data, clear flag */
  USART_SendData(USART2, r);
  }
  else
  {
    NVIC_DisableIRQ(USART2_IRQn);/* Disable USART1_IRQn */
  }
}

extern void UART2_send_byte(uint8_t byte)
{
    while(!((USART2->ISR)&(1
收藏 评论3 发布时间:2014-9-17 19:08

举报

3个回答
那片清茶 回答时间:2014-9-19 09:14:00

回复:STM32F030R8 UART2中断不能接受数据

 串口中断里面设置一个断点看看,能不能进来。
kongdy 回答时间:2014-11-18 15:08:57
111111111111111
逐梦 回答时间:2019-2-20 16:55:06
貌似uart2没有初始化
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版