STM32H743使用寄存器编写代码,单片机一个函数发送字符串到串口调试助手
时间: 2024-04-16 13:28:40 浏览: 163
您可以使用以下代码来实现在STM32H743单片上发送字符串到串口调试助手:
```c
#include "stm32h7xx.h"
void UART_sendString(char* str)
{
while (*str != '\0') // 逐个发送字符,直到遇到字符串结束符
{
while (!(USART1->ISR & USART_ISR_TXE)); // 等待发送缓冲区为空
USART1->TDR = *str; // 将字符写入发送缓冲区
str++;
}
}
int main(void)
{
// 启用UART时钟
RCC->APB2ENR |= RCC_APB2ENR_USART1EN;
// 配置UART引脚
GPIOA->MODER &= ~(GPIO_MODER_MODE9 | GPIO_MODER_MODE10);
GPIOA->MODER |= (GPIO_MODER_MODE9_1 | GPIO_MODER_MODE10_1);
GPIOA->AFR[1] |= (7 << GPIO_AFRH_AFSEL9_Pos) | (7 << GPIO_AFRH_AFSEL10_Pos);
// 配置UART参数
USART1->BRR = 48000000 / 115200; // 波特率为115200,时钟频率为48MHz
USART1->CR1 = USART_CR1_TE | USART_CR1_UE; // 使能发送和UART
// 发送字符串
char* message = "Hello, World!";
UART_sendString(message);
while (1)
{
// 主循环
}
}
```
这段代码假设您的串口调试助手连接到了USART1的引脚(PA9和PA10),并且时钟频率为48MHz。您可以根据实际情况进行修改。
在`UART_sendString`函数中,我们使用了寄存器来实现发送字符串。该函数逐个发送字符串中的字符,直到遇到字符串结束符`\0`。在发送每个字符之前,我们都会检查发送缓冲区是否为空,以确保上一个字符已经被发送完毕。
在`main`函数中,我们首先启用了USART1的时钟。然后,我们配置了UART引脚(PA9和PA10)的功能为复用功能,并设置了复用功能的AFSEL位。接下来,我们设置了UART的波特率和使能发送和UART功能。最后,我们调用了`UART_sendString`函数来发送字符串。
请注意,在实际使用中,您可能还需要进行一些其他的配置,例如中断处理和错误处理等。这里只提供了一个基本的示例供参考。
阅读全文