stm32cubemx 常用参考
keil5软件仿真及调试:
1. keil5软件仿真及调试 https://blog.csdn.net/weixin_47447179/article/details/124495311
定时器:
1. STM32-定时器详解
https://blog.csdn.net/qq_44016222/article/details/123507270
2. STM32CubeMX配置定时器中断_小哥。的博客-CSDN博客
3. STM32CubeMX—PWM波输出实验
https://blog.csdn.net/qq_33728095/article/details/96159745
3.
FreeRtos:
1.STM32CubeMX FreeRTOS堆栈分配、调试技巧:STM32CubeMX FreeRTOS堆栈分配、调试技巧 - 腾讯云开发者社区-腾讯云 (tencent.com)stm32cubemx中配置:
或者:
使用方法:
uint16_t task1_ram_availa =0; for(;;) { ........ task1_ram_availa = uxTaskGetStackHighWaterMark(task1Handle);//获取最高任务栈剩余量 printf("task1_ram_availa: %d\r\n",task1_ram_availa); osDelay(100); }
2. STM32CubeMX学习笔记(29)——FreeRTOS实时操作系统使用(消息队列)_Leung_ManWah的博客-CSDN博客_cubemx 消息队列
串口:
1. STM32CUBEMX,UART_Transmit()及timeout参数的意义:
经验分享STM32CUBEMX,UART_Transmit()及timeout参数的意义 (stmicroelectronics.cn)
2. printf 重定向:
stm32 hal printf重定向_无聊达612的博客-CSDN博客_hal 重定向
关于STM32中 printf函数的重定向问题 - 不会飞的小肥鱼 - 博客园 (cnblogs.com)
关于串口重定向,目前尝试只能使用HAL_UART_Transmit(),单个单个字节发送,使用包括中断传输HAL_UART_Transmit_IT(),DMA中断传输均会出现只发送 首字节的情况
#ifdef __GNUC__ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #endif PUTCHAR_PROTOTYPE { HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);//注意把&huart1改为自己的stm32使用的串口号 //HAL_UART_Transmit_IT(&huart1, (uint8_t *)&ch, 1);//不能使用 //HAL_UART_Transmit_DMA(&huart1, (uint8_t *)&ch,1);//不能使用 return ch; }
解决:由于使用中断发送数据,速度较直接发送慢,会出现前一句还没发送结束,后一句又覆盖发送的情况,这里使用串口标志位判断与超时判断确保数据发送完毕。目前看来,对于少部分数据,直接用HAL_UART_Transmit()对printf()进行重定向,效率较快;大组数据再采用中断或其他方式解决。
#ifdef __GNUC__ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #endif PUTCHAR_PROTOTYPE { //HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);//注意把&huart1改为自己的stm32使用的串口号 //HAL_UART_Transmit_IT(&huart1, (uint8_t *)&ch, 1); HAL_UART_Transmit_DMA(&huart1, (uint8_t *)&ch,1); int cnt = 10000;//定义超时 while((HAL_UART_STATE_READY !=huart1.gState)&&(cnt--)); return ch; }
3. 经测试,在使用FreeRTOS中,将串口响应任务设置为较高优先级,使用二值信号量进行控制,且任务阻塞时间osDelay()设置小点,可以提高串口任务的响应灵敏度。
IIC配置:
(13条消息) IIC原理超详细讲解---值得一看_Z小旋的博客-CSDN博客_iic
(13条消息) 【STM32】HAL库 STM32CubeMX教程十二---IIC(读取AT24C02 )_Z小旋的博客-CSDN博客_hal_i2c_master_transmit
问题1:IIC传输一直处于HAL_BUSY状态
解决1:经测试,iic的SDA脚一直处低电平状态,导致主机一直判断从机忙,原因:使用了iic的隔离芯片,导致芯片的上拉到MCU的引脚被隔开,无法正常通讯
(1)对于iic的IO口只有开漏模式的,iic引脚选择引脚上拉 PULUP
(2)对于没有上下拉选项的,iic引脚选择推挽模式输出
总之,让SDA引脚能够正确判断从机空闲(拉高)、繁忙(拉低)状态即可。(解决方法参考:(13条消息) STM32 HAL 硬件IIC出现HAL_BUSY总结_涵墨轻笙的博客-CSDN博客)