Keil MDK在线调试STM32时,观察watch发现数组不是预期写入的值的原因

增加栈空间SIZE

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Keil uVision 5中使用STM32F103芯片发送RS485数据需要进行以下步骤: 1. 配置USART串口通信模块 在STM32F103芯片中,USART1和USART2可以用于RS485通信,我们需要根据实际需要选择其中一个。配置串口通信模块的步骤如下: - 配置GPIO引脚:将USART的TX和RX引脚与MCU的GPIO引脚相连,并设置引脚为复用功能。 - 配置USART控制寄存器:设置波特率、数据位、停止位、校验位等参数。 - 使能USART模块:设置USART_CR1寄存器中的UE位为1。 2. 配置RS485收发控制引脚 RS485通信需要使用控制引脚控制发送和接收模式,通常使用RTS(发送使能)和CTS(接收使能)两个引脚。在STM32F103芯片中,我们可以使用GPIO引脚实现这两个控制引脚。配置步骤如下: - 配置GPIO引脚:将RTS和CTS引脚与MCU的GPIO引脚相连,并设置引脚为输出模式。 - 发送数据,将RTS引脚置为高电平,表示进入发送模式;接收数据,将RTS引脚置为低电平,表示进入接收模式。 3. 发送数据 发送数据,我们需要将数据写入USART_DR寄存器中,等待数据发送完成。代码示例如下: ```c void USART_SendData(USART_TypeDef* USARTx, uint16_t Data) { // 等待上一次发送完成 while ((USARTx->SR & USART_SR_TC) == 0); // 将数据写入发送寄存器 USARTx->DR = (Data & (uint16_t)0x01FF); } void RS485_SendArray(uint8_t *data, uint16_t len) { // 进入发送模式 GPIO_SetBits(GPIOB, GPIO_Pin_1); // 发送数据 for (uint16_t i = 0; i < len; i++) { USART_SendData(USART1, data[i]); } // 等待发送完成 while ((USART1->SR & USART_SR_TC) == 0); // 退出发送模式 GPIO_ResetBits(GPIOB, GPIO_Pin_1); } ``` 4. 接收数据 接收数据,我们需要检查USART_SR寄存器中的RXNE位,判断是否有新的数据接收完成。代码示例如下: ```c uint8_t USART_ReceiveData(USART_TypeDef* USARTx) { // 等待接收完成 while ((USARTx->SR & USART_SR_RXNE) == 0); // 读取接收寄存器中的数据 return (uint8_t)(USARTx->DR & (uint16_t)0x01FF); } void RS485_ReceiveArray(uint8_t *data, uint16_t len) { // 进入接收模式 GPIO_ResetBits(GPIOB, GPIO_Pin_1); // 接收数据 for (uint16_t i = 0; i < len; i++) { data[i] = USART_ReceiveData(USART1); } // 等待接收完成 while ((USART1->SR & USART_SR_TC) == 0); // 退出接收模式 GPIO_SetBits(GPIOB, GPIO_Pin_1); } ``` 以上就是在Keil uVision 5中使用STM32F103芯片发送RS485数据的基本步骤。需要根据实际情况进行适当的修改和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值