关于自己写的USART函数只能发送一个字符

关于自己写的MYUSART_SendString()函数每次只能发送一个字节

判断发送是否结束用错函数了,

不要用:

void MYUSART_SendByte(uint8_t data)
{
	USART_SendData(USART1, data);
	while(USART_GetITStatus(USART1, USART_IT_TXE)==RESET);
}

要用这个:

void MYUSART_SendByte(uint8_t data)
{
	USART_SendData(USART1, data);
	while(USART_GetFlagStatus(USART1, USART_FLAG_TXE)==RESET);
}

折腾了一早上,所以说写代码还是要细心,不骄不躁

当然可以!以下是使用HAL库在STM32上编串口发送数据的函数示例: ```c #include "stm32f4xx_hal.h" void UART_SendData(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t size) { HAL_UART_Transmit(huart, pData, size, HAL_MAX_DELAY); } ``` 在这个例子中,我们使用了HAL库提供的`HAL_UART_Transmit`函数发送数据。该函数的参数包括UART句柄(`huart`)、要发送的数据缓冲区指针(`pData`)以及数据大小(`size`)。`HAL_MAX_DELAY`表示在发送过程中不设置超时。 要使用该函数,你需要先实例化一个UART_HandleTypeDef结构体,并配置相应的UART外设。例如,你可以在主函数中添加以下代码: ```c int main(void) { // 初始化HAL库 HAL_Init(); // 配置GPIO和UART外设 __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_USART2_CLK_ENABLE(); GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Pin = GPIO_PIN_2 | GPIO_PIN_3; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF7_USART2; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); UART_HandleTypeDef huart2; huart2.Instance = USART2; huart2.Init.BaudRate = 115200; huart2.Init.WordLength = UART_WORDLENGTH_8B; huart2.Init.StopBits = UART_STOPBITS_1; huart2.Init.Parity = UART_PARITY_NONE; huart2.Init.Mode = UART_MODE_TX_RX; huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE; HAL_UART_Init(&huart2); // 发送数据 uint8_t data[] = "Hello, STM32!"; UART_SendData(&huart2, data, sizeof(data) - 1); while (1) { // 主循环 } } ``` 在上面的示例中,我们使用了USART2作为UART外设,并将PA2和PA3引脚配置为复用功能以与UART通信。然后,通过调用`UART_SendData`函数发送了一条字符串数据。 请注意,以上代码仅为示例,具体的配置和使用方法可能因所使用的STM32型号和开发环境而有所不同。因此,在实际应用中,你可能需要根据自己的需求进行适当修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值