STM32/STM8技术william hill官网
直播中

陈荣锦

7年用户 297经验值
私信 关注
[问答]

stm32f0的Usart的接受发送调试

调试STM32f0的Usart时出现问题,按照我的理解,如果通过PC和stm32f030的开发板串口通信时,在初始化中开启接收中断,程序全速运行,当接受到PC上的串口调试工具发下来的数据后进入接收中断的,可是不知为什么,我在PC的串口调试软件中还没有发数据,就进入接收中断了?这是为什么?求高手指点,谢谢!

回帖(16)

刘萍

2018-11-6 08:46:15
在 所有中断的设置过程中,记好,最好 先清除中断标志位再使能中断,我记不清是否是串口了,反正中断类似情况我被虐过好几次,现在乖乖的 所有的中断使能前 清除中断标志位!!
举报

望艳妮

2018-11-6 08:54:01
本帖最后由 mrclp 于 2016-5-23 09:15 编辑

Like this...
USART_ClearITPendingBit(USART1, USART_IT_TC);
USART_ITConfig(USART1, USART_IT_TC, ENABLE);
USART_Cmd(USART1, ENABLE);
举报

望艳妮

2018-11-6 09:01:58
首先你要明确下,你的初始化的程序中是否有使能串口中断,如果是能进串口中断函数的话,应该是使能了串口中断。在使能串口中断的时候,需要清一下中断标志。
举报

刘溪

2018-11-6 09:12:42
我也遇到过类似的问题,好好研究一下手册
举报

李雨坤

2018-11-6 09:29:17
首先,在串口中断中设置断点。
查看中断接收到的是什么数据?
如果是0x00,那么除了STM32编程问题外,还要考虑转换器、串口助手等因素。遇到0x00,可以先从网上下载个其它的串口助手试试。
举报

逯荣荣

2018-11-6 09:39:32
先清除中断标志位再使能中断,等待接收,查询内容
举报

刘埃生

2018-11-6 09:52:33
应该是设置问题吧。把所有的设置检查一遍吧。
举报

李云生

2018-11-6 10:09:41
如果设备处于接收状态的话,上电后是有可能进入接收中断一两次的,但是如果一直进的话就可能是硬件处理不对或者软件对应的中断没有正确清除...
举报

王幼萍

2018-11-6 10:28:06
在中断程序要检测接收完成标志(中间是_FLAG_R??这个), 检测到取数据清中断标志就OK了. 只检测接收寄存器(中间是_IT_R??这个)非空是会总进中断的. 因数接收还未完成,接收寄存器总是非空的, 这样会总进中断的(假死)
举报

刘建国

2018-11-6 10:45:22
有的调试助手软件在开启的时候,会发送一些配置之类的数据的,不知道楼主说的是不是这种情况
举报

陈荣锦

2018-11-6 10:57:15
引用: 嘻嘻爱哈哈 发表于 2018-11-6 16:57
首先,在串口中断中设置断点。
查看中断接收到的是什么数据?
如果是0x00,那么除了STM32编程问题外,还要考虑转换器、串口助手等因素。遇到0x00,可以先从网上下载个其它的串口助手试试。

接收的数据始终是0
举报

陈荣锦

2018-11-6 11:06:01
引用: 嘻嘻爱哈哈 发表于 2018-11-6 16:57
首先,在串口中断中设置断点。
查看中断接收到的是什么数据?
如果是0x00,那么除了STM32编程问题外,还要考虑转换器、串口助手等因素。遇到0x00,可以先从网上下载个其它的串口助手试试。

好的,谢谢你的回复
举报

陈荣锦

2018-11-6 11:18:01
引用: huzp 发表于 2018-11-6 16:40
我也遇到过类似的问题,好好研究一下手册

那你最后怎么解决的,请指教,谢谢!
举报

陈荣锦

2018-11-6 11:24:48
我的配置代码如下:
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 = 3;
        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 = 115200;
        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);
}
举报

陈荣锦

2018-11-6 11:33:12
引用: FAI_weilijuan 发表于 2018-11-6 16:21
本帖最后由 mrclp 于 2016-5-23 09:15 编辑

Like this...

好的,我按照你的顺序试试,谢谢指点!
举报

赵明

2018-11-6 11:49:49
这个需要先配置串口,然后再配置IO
举报

更多回帖

发帖
×
20
完善资料,
赚取积分