OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6076|回复: 3

stm32f030的串口Usart发送接收不正常,求高手指点!

[复制链接]

3

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2015-6-10
在线时间
16 小时
发表于 2016-5-27 17:24:46 | 显示全部楼层 |阅读模式
我在调试stm32f030的串口usart时,我还没有发送任何数据就能进一次接收中断,然后进一次发送中断,然后就在进不来了,不知道什么原因,找了好久了都没找出来到底是哪里错了,求高手指点,谢谢!程序代码如下:
void USART1_Configuration(void)
{
USART_InitTypeDef USART_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef  NVIC_InitStructure;

/* Enable GPIO clock */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
/* Enable USART clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
/* Connect PA9 to USART1_Tx */
GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_1);  
/* Connect PA10 to USART1_Rx */
GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_1);
  
/* Configure USART Tx and Rx as alternate function push-pull */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;
GPIO_Init(GPIOA, &GPIO_InitStructure);

/* Enable the USART1 gloabal Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
/* USARTx configuration ----------------------------------------------------*/
/* USARTx configured as follow:
- BaudRate = 115200 baud  
- Word Length = 8 Bits
- one Stop Bit
- No parity
- Hardware flow control disabled (RTS and CTS signals)
- Receive and transmit enabled
*/
USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
/* When using Parity the word length must be configured to 9 bits */
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);
  
/* Enable USART Receive data register not empty interrupt */
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
  
/* Enable USART */
USART_Cmd(USART1, ENABLE);
/* Clear Transmission complete flag */
USART_ClearFlag(USART1, USART_FLAG_TC);
}
int main()
{
  USART1_Configuration();
while(1)
{

}
}
void USART1_IRQHandler(void)
{
  if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //????
{
  test = USART_ReceiveData(USART1);
  USART_ITConfig(USART1, USART_IT_TC, ENABLE);
  USART_SendData(USART1,test);
  USART_ClearITPendingBit(USART1, USART_IT_RXNE);
  Usart1_rec_ok = 1;
}
if(USART_GetITStatus(USART1, USART_IT_TC) != RESET)
{
  USART_SendData(USART1,'1');
  USART_ITConfig(USART1, USART_IT_TC, DISABLE);
  USART_ClearITPendingBit(USART1, USART_IT_TC);
  Usart1_send_ok = 1;
}
}
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2016-7-20
在线时间
42 小时
发表于 2016-7-20 13:51:54 | 显示全部楼层
使能串口和使能串口中断反了吧。
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2016-6-3
在线时间
15 小时
发表于 2016-7-20 15:34:24 | 显示全部楼层

初始化串口的时候会进中断,两个if都会进,最后执行了这句话USART_ITConfig(USART1, USART_IT_TC, DISABLE);
个人意见,仅供参考。
回复 支持 反对

使用道具 举报

3

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2015-6-10
在线时间
16 小时
 楼主| 发表于 2016-7-21 10:01:32 | 显示全部楼层
是硬件板子的问题,程序没问题的。谢谢各位支持!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-10 02:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表