proteus论坛|仿真论坛
直播中

64jjj

5年用户 4经验值
擅长:可编程逻辑 接口/总线/驱动 RF/无线
私信 关注
[问答]

protues仿真STM32F103t6串口通信没法获取数值

1716059127218.jpg
protues仿真用USART1串口通信一直都读不到数值,中断啥的斗争。观察寄存器提示在数据 那里 0x00000004) not within memory block (0x00000020 bytes). 这是啥情况呀,有大佬遇到过这样情况吗???

void UartIRQ (UART_T *_pUart)
{

//uint8_t p=0x10;
if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)   //判断接收标志寄存器状态是否置位
{		
	
	GPIO_PWM2_TOGGLE;
	
	uint8_t ucTemp;
	
	//GPIO_PWM2_TOGGLE;
	ucTemp = USART_ReceiveData(USART1);
	
_pUart->pRxBuf[_pUart->usRxWrite] = ucTemp;
	
//	RECIVER_DATE_BUFF[i++]=ucTemp;   //将接受到的数据放到接收缓存区
	 
	if (++_pUart->usRxWrite >= _pUart->usRxBufSize) //当接受缓冲区的写指针数 超过 接收缓冲区的大小
	{
		_pUart->usRxWrite = 0;  // 接收缓冲区写指针 置零
	}
	
	if (_pUart->usRxCount < _pUart->usRxBufSize)  //  判断是否已经读取完 接收到的数据 当小于  _pUart->usRxBufSize 时 表示未读取完,
	{
		_pUart->usRxCount++;  // 还未读取的新数据个数 USART_GetITStatus 程序走一遍+1
	}
	
	MODS_ReciveNew(ucTemp); //拿来做一帧响应应答,判断数据是否连续   是否为一帧数据
	
	Usart_display(ucTemp);

// USART_SendData(USART1,ucTemp);
}

}

已退回5积分

回帖(1)

贾飞世

2024-5-21 17:23:58
从你提供的代码和描述来看,你在尝试使用STM32F103t6的USART1进行串口通信,但是遇到了一些问题。根据你的描述,你无法读取到数值,而且观察到寄存器提示在数据那里出现了一个问题。这个问题可能是由于以下几个原因导致的:

1. 串口初始化不正确:请确保你已经正确地初始化了串口,包括波特率、字长、停止位和校验位等参数。你可以使用STM32CubeMX工具来生成初始化代码,或者手动配置寄存器。

2. 中断配置不正确:请确保你已经正确地配置了串口接收中断,并在NVIC中使能了该中断。同时,确保你的中断服务函数(如UartIRQ)已经被正确地注册到中断向量表中。

3. 缓冲区管理问题:在你的代码中,你使用了_pUart->pRxBuf和_pUart->usRxWrite来存储接收到的数据。请确保这些变量已经被正确地初始化,并且你的缓冲区管理逻辑是正确的。例如,你需要在接收到数据后更新_pUart->usRxWrite指针,并确保不会覆盖未处理的数据。

4. 串口通信问题:请检查你的串口通信设备(如另一个单片机或电脑)是否已经正确地配置了串口参数,并且发送的数据格式是正确的。此外,确保你的STM32F103t6和通信设备之间的连接是正确的。

5. 寄存器访问问题:你提到的错误提示“0x00000004 not within memory block (0x00000020 bytes)”可能是由于访问了错误的寄存器地址。请检查你的代码中是否有错误的寄存器访问,或者是否正确地包含了相应的头文件。

为了解决这个问题,你可以尝试以下步骤:

1. 仔细检查你的串口初始化代码,确保所有参数都是正确的。

2. 检查你的中断配置,确保串口接收中断已经被正确地使能和注册。

3. 检查你的缓冲区管理逻辑,确保数据可以正确地存储和读取。

4. 使用串口调试助手或其他工具检查你的串口通信设备是否发送了正确的数据。

5. 仔细检查你的代码,确保没有错误的寄存器访问。


举报

更多回帖

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