keil 模拟运行之串口设置 stm32f103rc

解决Keil UART通信测试:监控发送与接收数据
本文指导如何在Keil中使用UART进行数据传输,重点在于理解如何在监视窗口查看发送和接收的数据,以确保通信的正确性,涉及COM2和COM4接口的使用。

config.ini

 

Keil 的UART监视窗口只能显示发送的数据,不能显示接收到的数据。所以,要测试是否成功,只需向UART1和2分别发送数据,再查看对应的虚拟串口是否收到数据即可。我这里是COM2和COM4

### 如何在Keil中查看和配置串口寄存器 在Keil开发环境中,调试嵌入式系统时,查看和配置串口寄存器是常见的需求。以下是如何在Keil中实现这一目标的详细方法。 #### 查看串口寄存器的值 在Keil中查看串口寄存器的值需要进入调试模式,并通过System Viewer窗口进行操作: 1. **进入调试模式**:在Keil中启动调试会话,确保程序已经加载到目标设备中。 2. **打开System Viewer**:在菜单栏中选择 `View` -> `System Viewer`,这将打开一个窗口,显示目标设备中所有外设的寄存器信息。 3. **选择串口外设**:在System Viewer窗口中,找到并选择所需的串口外设(如USART1、UART2等)。选择后,窗口将显示该串口的所有寄存器及其当前值。 4. **读取寄存器值**:通过观察寄存器的值,可以了解串口的当前状态。例如,查看`SR`(状态寄存器)和`DR`(数据寄存器)可以帮助判断串口是否接收到数据或是否准备好发送数据。 需要注意的是,某些寄存器(如`DR`寄存器)在被读取时可能会自动清除某些标志位(如`RXNE`标志位),这可能会影响程序的行为。因此,在调试过程中应谨慎操作,避免因查看寄存器而导致数据丢失或中断处理失败[^1]。 #### 配置串口寄存器 配置串口寄存器通常涉及设置波特率、数据位、停止位和校验位等参数。以下是一个典型的串口配置流程: 1. **启用串口时钟**:在配置串口之前,必须确保串口外设的时钟已经启用。例如,在STM32系列MCU中,可以通过`RCC_APB1PeriphClockCmd`函数启用USART2的时钟。 2. **配置GPIO引脚**:将用于串口通信的GPIO引脚配置为复用推挽模式,并将其映射到相应的串口功能上。 3. **初始化串口参数**:使用`USART_Init`函数配置串口的波特率、数据位、停止位和校验方式等参数。 4. **使能串口**:调用`USART_Cmd`函数启用串口。 5. **配置中断(可选)**:如果需要使用中断方式进行数据收发,可以配置相应的中断源并编写中断服务程序。 以下是一个简单的串口初始化示例代码: ```c #include "stm32f10x.h" void USART2_Init(void) { // 启用USART2时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); // 配置GPIO引脚 GPIO_InitTypeDef GPIO_InitStruct; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 配置PA2为USART2_TX GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStruct); // 配置PA3为USART2_RX GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStruct); // 配置USART2参数 USART_InitTypeDef USART_InitStruct; USART_InitStruct.USART_BaudRate = 9600; USART_InitStruct.USART_WordLength = USART_WordLength_8b; USART_InitStruct.USART_StopBits = USART_StopBits_1; USART_InitStruct.USART_Parity = USART_Parity_No; USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_Init(USART2, &USART_InitStruct); // 使能USART2 USART_Cmd(USART2, ENABLE); } int main(void) { // 初始化USART2 USART2_Init(); while (1) { // 主循环 } } ``` #### 调试注意事项 在调试过程中,尤其是在使用中断处理串口数据时,需要注意以下几点: - **避免直接读取敏感寄存器**:某些寄存器(如`DR`寄存器)在被读取时会自动清除标志位(如`RXNE`标志位),这可能导致中断处理程序无法正确执行。因此,在调试过程中应尽量避免在中断处理程序执行前查看这些寄存器的值。 - **确保中断标志位正确设置**:只有当`RXNE`标志位和`RXNEIE`标志位同时被设置时,才会触发串口接收中断。如果其中一个标志位被意外清除,可能会导致中断无法触发,进而影响数据接收[^1]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值