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

关于stm32f0的Usart的接受发送调试

[复制链接]
alisa123 提问时间:2016-5-22 22:53 /
调试stm32f0的Usart时出现问题,按照我的理解,如果通过PC和stm32f030的开发板串口通信时,在初始化中开启接收中断,程序全速运行,当接受到PC上的串口调试工具发下来的数据后进入接收中断的,可是不知为什么,我在PC的串口调试软件中还没有发数据,就进入接收中断了?这是为什么?求高手指点,谢谢!
收藏 评论16 发布时间:2016-5-22 22:53

举报

16个回答
alisa123 回答时间:2016-5-24 09:21:07
我的配置代码如下:
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);
}
lzts 回答时间:2016-5-23 23:13:41
在中断程序要检测接收完成标志(中间是_FLAG_R??这个), 检测到取数据清中断标志就OK了. 只检测接收寄存器(中间是_IT_R??这个)非空是会总进中断的. 因数接收还未完成,接收寄存器总是非空的, 这样会总进中断的(假死)

评分

参与人数 1ST金币 +2 收起 理由
肖久 + 2

查看全部评分

Dylan疾风闪电 回答时间:2016-5-23 10:21:28
首先,在串口中断中设置断点。
查看中断接收到的是什么数据?
如果是0x00,那么除了STM32编程问题外,还要考虑转换器、串口助手等因素。遇到0x00,可以先从网上下载个其它的串口助手试试。

评分

参与人数 1ST金币 +2 收起 理由
肖久 + 2

查看全部评分

jtc_88 回答时间:2016-5-23 08:53:39
在 所有中断的设置过程中,记好,最好 先清除中断标志位再使能中断,我记不清是否是串口了,反正中断类似情况我被虐过好几次,现在乖乖的 所有的中断使能前 清除中断标志位!!

评分

参与人数 1ST金币 +2 收起 理由
肖久 + 2

查看全部评分

mrclp 回答时间:2016-5-23 09:11:14
本帖最后由 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);

评分

参与人数 1ST金币 +2 收起 理由
肖久 + 2

查看全部评分

huaiqiao 回答时间:2016-5-23 09:13:52
首先你要明确下,你的初始化的程序中是否有使能串口中断,如果是能进串口中断函数的话,应该是使能了串口中断。在使能串口中断的时候,需要清一下中断标志。

评分

参与人数 1ST金币 +2 收起 理由
肖久 + 2

查看全部评分

leolzf0000 回答时间:2016-5-23 09:26:04
我也遇到过类似的问题,好好研究一下手册
馕边子 回答时间:2016-5-23 11:05:20
先清除中断标志位再使能中断,等待接收,查询内容

评分

参与人数 1ST金币 +2 收起 理由
肖久 + 2

查看全部评分

yuazhang 回答时间:2016-5-23 12:43:53
应该是设置问题吧。把所有的设置检查一遍吧。
power568 回答时间:2016-5-23 13:54:12
如果设备处于接收状态的话,上电后是有可能进入接收中断一两次的,但是如果一直进的话就可能是硬件处理不对或者软件对应的中断没有正确清除...

评分

参与人数 1ST金币 +2 收起 理由
肖久 + 2

查看全部评分

zcl201207 回答时间:2016-5-23 23:36:59
有的调试助手软件在开启的时候,会发送一些配置之类的数据的,不知道楼主说的是不是这种情况

评分

参与人数 1ST金币 +2 收起 理由
肖久 + 2

查看全部评分

alisa123 回答时间:2016-5-24 09:04:30
Dylan疾风闪电 发表于 2016-5-23 10:21
首先,在串口中断中设置断点。
查看中断接收到的是什么数据?
如果是0x00,那么除了STM32编程问题外,还要 ...

接收的数据始终是0
alisa123 回答时间:2016-5-24 09:18:19
Dylan疾风闪电 发表于 2016-5-23 10:21
首先,在串口中断中设置断点。
查看中断接收到的是什么数据?
如果是0x00,那么除了STM32编程问题外,还要 ...

好的,谢谢你的回复
alisa123 回答时间:2016-5-24 09:19:06
leolzf0000 发表于 2016-5-23 09:26
我也遇到过类似的问题,好好研究一下手册

那你最后怎么解决的,请指教,谢谢!
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版