STM32 单片机,设置串口 115200,打印 printf(“ABCDEFGHIJKLMNOPQRSTUVWXYZ“);如何计算需要多少时间

要计算通过115200波特率的串口发送一个特定字符串所需的时间,我们首先需要知道该字符串的字节长度(不包括任何可能的控制字符或终止符)。在这个例子中,字符串是ASCII字符组成的,所以每个字符占用一个字节。

给定的字符串是:

在115200波特率的串口下,每秒可以发送115200个位。但是,由于每个字节(8位数据)通常还包含一个起始位(1位)和一个停止位(1位),所以每个字节实际上需要发送10个位。

因此,发送26个字节所需的总位数是:
26 字节 * 10 位/字节 = 260 位

所需的时间(以秒为单位)是:
260 位 / 115200 位/秒 ≈ 0.002257 秒

转换为毫秒,大约是:
0.002257 秒 * 1000 = 2.257 毫秒

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是基于STM32F407和SIM800C模块通过onenet进行数据输的例程: 首先,需要连接SIM800C模块和STM32F407开发板。连接方式如下: SIM800C模块: VCC:5V GND:GND RXD:PA9 TXD:PA10 PWRKEY:PB0 RESET:PB1 STM32F407开发板: PA9:SIM800C的RXD PA10:SIM800C的TXD PB0:SIM800C的PWRKEY PB1:SIM800C的RESET 在STM32F407开发板上使用HAL库进行编程,首先需要配置UART串口: ```c /*定义串口句柄*/ UART_HandleTypeDef huart1; /*初始化串口1*/ void MX_USART1_UART_Init(void) { huart1.Instance = USART1; huart1.Init.BaudRate = 115200; huart1.Init.WordLength = UART_WORDLENGTH_8B; huart1.Init.StopBits = UART_STOPBITS_1; huart1.Init.Parity = UART_PARITY_NONE; huart1.Init.Mode = UART_MODE_TX_RX; huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; huart1.Init.OverSampling = UART_OVERSAMPLING_16; if (HAL_UART_Init(&huart1) != HAL_OK) { Error_Handler(); } } ``` 接下来,需要配置SIM800C模块的AT指令: ```c /*定义AT指令缓存*/ char at_cmd[50]; /*发送AT指令*/ void send_at_cmd(char *cmd) { HAL_UART_Transmit(&huart1, (uint8_t*)cmd, strlen(cmd), 1000); HAL_UART_Transmit(&huart1, (uint8_t*)"\r\n", 2, 1000); } /*获取AT指令回复*/ void get_at_reply(char *reply, uint16_t timeout) { uint8_t rx_data; uint16_t idx = 0; HAL_UART_Receive(&huart1, &rx_data, 1, 0xFFFF); while (rx_data != '\n' && idx < 50) { if (rx_data != '\r') { reply[idx++] = rx_data; } HAL_UART_Receive(&huart1, &rx_data, 1, timeout); } reply[idx] = '\0'; } ``` 接下来,需要连接onenet平台。首先需要获取设备ID和API Key: ```c /*定义设备ID和API Key*/ char device_id[] = "123456"; char api_key[] = "abcdefghijklmnopqrstuvwxyz"; ``` 然后,需要连接GPRS网络并获取IP地址: ```c /*连接GPRS网络*/ send_at_cmd("AT+CGATT=1"); get_at_reply(at_cmd, 1000); send_at_cmd("AT+CSTT=\"CMNET\""); get_at_reply(at_cmd, 1000); send_at_cmd("AT+CIICR"); get_at_reply(at_cmd, 10000); /*获取IP地址*/ send_at_cmd("AT+CIFSR"); get_at_reply(at_cmd, 1000); ``` 接下来,需要连接onenet平台: ```c /*连接onenet平台*/ sprintf(at_cmd, "AT+CIPSTART=\"TCP\",\"%s\",\"%s\"", "183.230.40.39", "80"); send_at_cmd(at_cmd); get_at_reply(at_cmd, 10000); ``` 然后,需要构建HTTP请求头: ```c /*构建HTTP请求头*/ sprintf(at_cmd, "POST /devices/%s/datapoints HTTP/1.1\r\n", device_id); send_at_cmd(at_cmd); send_at_cmd("Host: api.heclouds.com\r\n"); sprintf(at_cmd, "api-key: %s\r\n", api_key); send_at_cmd(at_cmd); send_at_cmd("Content-Type: application/json\r\n"); ``` 接下来,需要构建HTTP请求体: ```c /*构建HTTP请求体*/ char json_data[50]; sprintf(json_data, "{\"datastreams\":[{\"id\":\"temperature\",\"datapoints\":[{\"value\":%d}]}]}", temperature); sprintf(at_cmd, "Content-Length: %d\r\n", strlen(json_data)); send_at_cmd(at_cmd); send_at_cmd("\r\n"); send_at_cmd(json_data); ``` 最后,需要关闭GPRS网络和释放SIM800C模块的UART资源: ```c /*关闭GPRS网络*/ send_at_cmd("AT+CIPSHUT"); get_at_reply(at_cmd, 10000); /*释放UART资源*/ HAL_UART_DeInit(&huart1); ``` 完整的代码如下: ```c #include "main.h" #include <string.h> #include <stdio.h> /*定义串口句柄*/ UART_HandleTypeDef huart1; /*定义AT指令缓存*/ char at_cmd[50]; /*定义设备ID和API Key*/ char device_id[] = "123456"; char api_key[] = "abcdefghijklmnopqrstuvwxyz"; /*获取AT指令回复*/ void get_at_reply(char *reply, uint16_t timeout) { uint8_t rx_data; uint16_t idx = 0; HAL_UART_Receive(&huart1, &rx_data, 1, 0xFFFF); while (rx_data != '\n' && idx < 50) { if (rx_data != '\r') { reply[idx++] = rx_data; } HAL_UART_Receive(&huart1, &rx_data, 1, timeout); } reply[idx] = '\0'; } /*发送AT指令*/ void send_at_cmd(char *cmd) { HAL_UART_Transmit(&huart1, (uint8_t*)cmd, strlen(cmd), 1000); HAL_UART_Transmit(&huart1, (uint8_t*)"\r\n", 2, 1000); } /*连接GPRS网络并获取IP地址*/ void connect_gprs_network() { /*连接GPRS网络*/ send_at_cmd("AT+CGATT=1"); get_at_reply(at_cmd, 1000); send_at_cmd("AT+CSTT=\"CMNET\""); get_at_reply(at_cmd, 1000); send_at_cmd("AT+CIICR"); get_at_reply(at_cmd, 10000); /*获取IP地址*/ send_at_cmd("AT+CIFSR"); get_at_reply(at_cmd, 1000); } /*连接onenet平台*/ void connect_onenet_platform() { /*连接onenet平台*/ sprintf(at_cmd, "AT+CIPSTART=\"TCP\",\"%s\",\"%s\"", "183.230.40.39", "80"); send_at_cmd(at_cmd); get_at_reply(at_cmd, 10000); } /*构建HTTP请求头*/ void construct_http_request_header() { /*构建HTTP请求头*/ sprintf(at_cmd, "POST /devices/%s/datapoints HTTP/1.1\r\n", device_id); send_at_cmd(at_cmd); send_at_cmd("Host: api.heclouds.com\r\n"); sprintf(at_cmd, "api-key: %s\r\n", api_key); send_at_cmd(at_cmd); send_at_cmd("Content-Type: application/json\r\n"); } /*构建HTTP请求体*/ void construct_http_request_body(int temperature) { /*构建HTTP请求体*/ char json_data[50]; sprintf(json_data, "{\"datastreams\":[{\"id\":\"temperature\",\"datapoints\":[{\"value\":%d}]}]}", temperature); sprintf(at_cmd, "Content-Length: %d\r\n", strlen(json_data)); send_at_cmd(at_cmd); send_at_cmd("\r\n"); send_at_cmd(json_data); } /*关闭GPRS网络*/ void shutdown_gprs_network() { /*关闭GPRS网络*/ send_at_cmd("AT+CIPSHUT"); get_at_reply(at_cmd, 10000); } /*释放UART资源*/ void release_uart_resources() { /*释放UART资源*/ HAL_UART_DeInit(&huart1); } /*初始化串口1*/ void MX_USART1_UART_Init(void) { huart1.Instance = USART1; huart1.Init.BaudRate = 115200; huart1.Init.WordLength = UART_WORDLENGTH_8B; huart1.Init.StopBits = UART_STOPBITS_1; huart1.Init.Parity = UART_PARITY_NONE; huart1.Init.Mode = UART_MODE_TX_RX; huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; huart1.Init.OverSampling = UART_OVERSAMPLING_16; if (HAL_UART_Init(&huart1) != HAL_OK) { Error_Handler(); } } int main(void) { /*初始化串口1*/ MX_USART1_UART_Init(); /*连接GPRS网络并获取IP地址*/ connect_gprs_network(); /*连接onenet平台*/ connect_onenet_platform(); /*构建HTTP请求头*/ construct_http_request_header(); /*构建HTTP请求体*/ int temperature = 25; construct_http_request_body(temperature); /*关闭GPRS网络*/ shutdown_gprs_network(); /*释放UART资源*/ release_uart_resources(); while (1) { } } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值