串口发送通信---UART发送---STM32F4实现

串口发送程序配置过程(HAL库)
  1. 初始化串口相关参数,使能串口
HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart)

该函数的参数是串口的基址,在stm32f429xx.h文件中,定义了8个UART_HandleTypeDef的值,分别是USART1、USART2、USART3、UART4、UART5、USART6、UART7、UART8,可以用HAL_UART_Init对这8个串口进行初始化,我们要用USART1,就填USART1

  1. 串口相关IO口配置,复用配置
在HAL_UART_MspInit中调用HAL_GPIO_Init函数
  1. 发送数据,并等待数据发送完毕
HAL_UART_Transmit()
具体代码

我们以STM32F4中的 PA9和PA10的UART1通信为例。

  1. 首先是初始化串口相关参数,使能串口,使用的函数是HAL_UART_Init(),我们定义一个函数来调用它,具体代码如下:
UART_HandleTypeDef usart_handler;

void usart1_init(void)
{
   
	
	
	usart_handler.Instance = USART1;						//指定用哪个串口
	usart_handler.Init.BaudRate = 115200;					//波特率设置
	usart_handler.Init.HwFlowCtl = UART_HWCON
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ESP32-01S和STM32可以通过串口进行通信,下面是基本的接线和通信代码: 1. 接线 ESP32-01S | STM32 -|- TX | RX RX | TX GND | GND 2. 代码 在STM32的代码中,需要使用UART串口)进行通信。具体实现可以参考下面的代码示例: ```c #include <stdio.h> #include <string.h> #include "stm32f4xx.h" #define UART_TX_PIN GPIO_Pin_9 #define UART_RX_PIN GPIO_Pin_10 void USART1_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1); GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1); GPIO_InitStructure.GPIO_Pin = UART_TX_PIN | UART_RX_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); USART_InitStructure.USART_BaudRate = 115200; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART1, &USART_InitStructure); USART_Cmd(USART1, ENABLE); } void USART1_SendChar(char ch) { while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); USART_SendData(USART1, (uint16_t) ch); } char USART1_ReceiveChar(void) { while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET); return (char) USART_ReceiveData(USART1); } int main(void) { USART1_Init(); while (1) { // 发送数据 USART1_SendChar('H'); USART1_SendChar('e'); USART1_SendChar('l'); USART1_SendChar('l'); USART1_SendChar('o'); USART1_SendChar('\n'); // 接收数据 char ch = USART1_ReceiveChar(); if (ch != '\0') { printf("Received: %c\n", ch); } } } ``` 在ESP32-01S的代码中,同样需要使用UART进行通信。具体实现可以参考下面的代码示例: ```c #include <stdio.h> #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "driver/uart.h" #define UART_TX_PIN 1 #define UART_RX_PIN 3 void uart_init(void) { uart_config_t uart_config = { .baud_rate = 115200, .data_bits = UART_DATA_8_BITS, .parity = UART_PARITY_DISABLE, .stop_bits = UART_STOP_BITS_1, .flow_ctrl = UART_HW_FLOWCTRL_DISABLE }; uart_param_config(UART_NUM_1, &uart_config); uart_set_pin(UART_NUM_1, UART_TX_PIN, UART_RX_PIN, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE); uart_driver_install(UART_NUM_1, 1024, 1024, 0, NULL, 0); } void uart_send(char* data, int len) { uart_write_bytes(UART_NUM_1, data, len); } void uart_receive(void *pvParameters) { char data[256]; while (1) { int len = uart_read_bytes(UART_NUM_1, (uint8_t*) data, sizeof(data), 100 / portTICK_RATE_MS); if (len > 0) { printf("Received: %s\n", data); } } } void app_main() { uart_init(); xTaskCreate(uart_receive, "uart_receive", 1024 * 2, NULL, 10, NULL); while(1) { // 发送数据 uart_send("Hello\n", 6); vTaskDelay(1000 / portTICK_RATE_MS); } } ``` 需要注意的是,在ESP32-01S的代码中,我们使用了FreeRTOS来创建一个任务来接收串口数据。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值