STM32使用 sprintf 函数时遇到的造成死机的原因

使用环境(蓝色粗体字为特别注意内容)
1、软件环境:Keil MDK 5.15
2、硬件环境:STM32F103C8T6最小系统

今天在进行STM32编程的时候出现一个奇怪的错误,程序阻塞在一个函数里面,查了半天发现阻塞在sprintf函数中!!!我们来看看问题现场。

串口打印了第一句,就卡死了,下一句没有执行到。

查看了原因如下

void foo(char *path)
{
	...
	printu("enter dir:%s\r\n", path);
	sprintf(path + i, "/%s", fn);
	printu("enter1 dir:%s\r\n", path);
	...

}

调用 foo("0:");

造成对path数组的访问越界了!调用的时候写成如下形式即可:

char path[10] ="0:";
foo(path);

 

### STM32F103RCT6与WiFi的相关教程及使用指南 STM32F103RCT6是一款基于ARM Cortex-M3架构的高性能微控制器,其具体型号定义如下: - **R** 表示该芯片具有64个引脚。 - **C** 表示闪存容量为256KB。 - **T6** 是封装形式的一部分,表示LQFP64封装。 当涉及到WiFi功能,通常需要借助外部模块来实现无线通信能力,因为STM32F103本身并不具备内置WiFi硬件支持。常见的解决方案包括使用ESP8266或ESP32作为WiFi模块,并通过串口或其他接口与STM32F103进行通信[^1]。 #### 硬件连接方案 为了使STM32F103RCT6能够支持WiFi功能,可以采用以下方法之一: 1. **UART接口连接ESP8266/ESP32模块** 将STM32F103的USART端口配置为主设备模式,用于发送AT指令控制ESP8266的工作状态。例如,在初始化阶段可以通过发送`AT+CWMODE=1`命令设置ESP8266进入Station模式[^3]。 2. **SPI/I²C协议扩展** 如果项目需求更高带宽的数据传输,则可以选择利用SPI或者I²C总线替代传统的UART方式完成两者间的信息交换过程。不过需要注意的是这种情况下可能还需要额外增加一些驱动程序开发工作量。 #### 软件设计思路 以下是构建一个简单的WiFi客户端应用程序的大致框架: ```c #include "stm32f1xx_hal.h" #include <string.h> #define ESP8266_BAUDRATE 9600U // 初始化串口函数 void MX_USART_Init(void){ huart2.Instance = USART2; huart2.Init.BaudRate = ESP8266_BAUDRATE; HAL_UART_Init(&huart2); } int main(void){ char buffer[100]; uint8_t response; /* MCU Initialization */ HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_USART_Init(); // 发送启动命令给ESP8266并等待回应 while(1){ memset(buffer,'\0',sizeof(buffer)); sprintf(buffer,"AT\r\n"); HAL_UART_Transmit(&huart2,(uint8_t*)buffer,strlen((char *)buffer),HAL_MAX_DELAY); delay_ms(100); HAL_UART_Receive(&huart2,&response,1,HAL_MAX_DELAY); if(response == 'O') break;// 假设收到'O'字符即认为成功建立链接 } // 继续执行其他操作... } ``` 此代码片段展示了如何向ESP8266发送基础测试命令(AT),并通过读取返回值判断当前模块是否正常响应。 #### 注意事项 - 在实际应用过程中应充分考虑信号强度、干扰源等因素的影响; - 对于长间运行的应用场景建议加入看门狗机制防止死机现象发生; - 根据具体的业务逻辑调整相应的参数设定比如超间等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值