完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在 所有中断的设置过程中,记好,最好 先清除中断标志位再使能中断,我记不清是否是串口了,反正中断类似情况我被虐过好几次,现在乖乖的 所有的中断使能前 清除中断标志位!!
|
|
|
|
本帖最后由 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); |
|
|
|
首先你要明确下,你的初始化的程序中是否有使能串口中断,如果是能进串口中断函数的话,应该是使能了串口中断。在使能串口中断的时候,需要清一下中断标志。
|
|
|
|
我也遇到过类似的问题,好好研究一下手册
|
|
|
|
首先,在串口中断中设置断点。
查看中断接收到的是什么数据? 如果是0x00,那么除了STM32编程问题外,还要考虑转换器、串口助手等因素。遇到0x00,可以先从网上下载个其它的串口助手试试。 |
|
|
|
先清除中断标志位再使能中断,等待接收,查询内容
|
|
|
|
应该是设置问题吧。把所有的设置检查一遍吧。
|
|
|
|
如果设备处于接收状态的话,上电后是有可能进入接收中断一两次的,但是如果一直进的话就可能是硬件处理不对或者软件对应的中断没有正确清除...
|
|
|
|
在中断程序要检测接收完成标志(中间是_FLAG_R??这个), 检测到取数据清中断标志就OK了. 只检测接收寄存器(中间是_IT_R??这个)非空是会总进中断的. 因数接收还未完成,接收寄存器总是非空的, 这样会总进中断的(假死)
|
|
|
|
有的调试助手软件在开启的时候,会发送一些配置之类的数据的,不知道楼主说的是不是这种情况
|
|
|
|
嘻嘻爱哈哈 发表于 2018-11-6 16:57 接收的数据始终是0 |
|
|
|
嘻嘻爱哈哈 发表于 2018-11-6 16:57 好的,谢谢你的回复 |
|
|
|
|
|
|
|
我的配置代码如下:
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); } |
|
|
|
好的,我按照你的顺序试试,谢谢指点! |
|
|
|
这个需要先配置串口,然后再配置IO
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2201 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
2027 浏览 3 评论
4633 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2171 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2705 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 08:43 , Processed in 0.778595 second(s), Total 73, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号