![](https://img-blog.csdnimg.cn/20190918140037908.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
STM32
文章平均质量分 51
STM32
lljss2020
这个作者很懒,什么都没留下…
展开
-
HardFault错误定位(数组越界导致)
在进行单片机的开发时,我们有时会遇到程序运行异常,进入到了hardfault中断。原创 2024-06-06 09:07:54 · 402 阅读 · 0 评论 -
HAL_UART_IRQHandler(UART_HandleTypeDef *huart)分析
/接收有错误:执行UART_Receive_IT(huart)、HAL_UART_ErrorCallback(huart)//HAL_UART_Receive_IT(&huart1,Tx_Buff,1);//#1 接收没错误、#2 接收有错误,接收数据量达到设定值会自动关闭接收中断。//接收没错误:执行UART_Receive_IT(huart)//#3 接收有错误回调。原创 2024-06-04 17:54:48 · 490 阅读 · 0 评论 -
STM32F103 打印复位原因
【代码】STM32F103 打印复位原因。原创 2024-05-20 13:22:54 · 197 阅读 · 0 评论 -
Windows+VSCode+gcc+Cygwin Make实现STM32F030编译
1. 下载与安装Cygwin MakeCygwin是一个在windows平台上运行的类UNIX模拟环境,是cygnus solutions公司开发的自由软件(该公司开发的著名工具还有eCos,不过现已被Redhat收购)。它对于学习UNIX/Linux操作环境,或者从UNIX到Windows的应用程序移植,或者进行某些特殊的开发工作,尤其是使用GNU工具集在Windows上进行嵌入式系统开发,非常有用。随着嵌入式系统开发在国内日渐流行,越来越多的开发者对Cygwin产生了兴趣。https://cygwi原创 2021-03-23 22:09:43 · 920 阅读 · 0 评论 -
STM32串口溢出错误Overrun使用不当导致的串口死机
1. STM32串口默认是打开Overrun、DMA on RX Error2. 使用HAL库,打开Overrun如果出现错误,HAL库函数会关闭接收,再调用错误回调函数(用户需实现,不然串口接收不再工作,从外部看串口死机)void HAL_UART_IRQHandler(UART_HandleTypeDef *huart){ errorcode = huart->ErrorCode; if ((HAL_IS_BIT_SET(huart->Instance-原创 2020-11-21 20:24:32 · 13052 阅读 · 2 评论 -
HAL_DMA_IRQHandler()代码详细分析
这里使用ADC1联动DMA1, 开启半传输中断、传输中断。debug时,dma也一直在工作,所以半传输中断、传输中断会同时生效。1. adc1使用了DMA1_Stream0,Instance表示如下一个DMA数据流中断标志占6个bit(在DMA_LISR)。Stream0 :hdma->StreamIndex=0,Stream1:hdma->StreamIndex=6DMA_Base_Registers *regs_dma = (DMA_Base_Registers *)hdma-原创 2020-11-09 21:20:57 · 8968 阅读 · 1 评论 -
STM32中优先级HAL级代码分析
1. 代码void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority){ uint32_t prioritygroup = 0x00U; /* Check the parameters */ assert_param(IS_NVIC_SUB_PRIORITY(SubPriority)); assert_param(IS_NVIC_PREEMPTION_PRIORI原创 2020-11-04 22:00:58 · 1097 阅读 · 0 评论 -
STM32H743在AD工作时执行HAL_ADCEx_Calibration_Start()作AD校准出错
1. Calibration prerequisite: ADC must be disabled (execute this function before HAL_ADC_Start() or after HAL_ADC_Stop() )函数说明很清楚,ADC校准需在ADC开始前或结束后。2. 官方代码/** * @brief Perform an ADC automatic self-calibration * Calibration prerequisite: ADC原创 2020-11-03 20:45:43 · 8771 阅读 · 2 评论 -
STM32调试串口输出函数
#include <stdio.h>uint8_t testString[255];void logs(const char *buf, uint32_t dat){ uint8_t length; snprintf((char *)testString, sizeof(testString), buf, dat); length = strlen((const char *)testString); HAL_UART_Transmit(&huart4,testString原创 2020-10-19 21:21:26 · 404 阅读 · 0 评论 -
STM32H7串口查询方式接收串口接收溢出导致死机问题
串口溢出后,因为接收移位寄存器不会把接收到的数据放到接收寄存器中,则RXNE/RXFNE不会再置位,不能再接收,表现为串口死机__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_RXNE_RXFNE(USART_TypeDef *USARTx){ return ((READ_BIT(USARTx->ISR, USART_ISR_RXNE_RXFNE) == (USART_ISR_RXNE_RXFNE)) ? 1UL : 0UL);}在串口初原创 2020-10-19 21:17:23 · 1225 阅读 · 1 评论 -
STM32 HAL 串口接收错误处理重写HAL_UART_ErrorCallback函数
Debug程序使其运行在一处断点处,停止程序运行。发送2个或2个以上字节到串口,串口会出现溢出错误。void HAL_UART_IRQHandler(UART_HandleTypeDef *huart){//执行 UART_EndRxTransfer(huart);UART_EndRxTransfer(huart);......HAL_UART_ErrorCallback(huart);......}static void UART_EndRxTransfer(UART_HandleTy原创 2020-10-07 09:23:04 · 8013 阅读 · 1 评论 -
STM32F1 HAL串口接收中断函数
1. 寄存器1.1 状态寄存器1.2 控制寄存器CR11.3 控制寄存器CR32. 代码分析stm32f1xx_hal_uart.c/** * @brief This function handles UART interrupt request. * @param huart Pointer to a UART_HandleTypeDef structure that contains * the configuration inf原创 2020-09-12 11:26:27 · 1554 阅读 · 0 评论 -
自己实现STM32串口中断接收服务函数
1. 初始化函数不变void MX_USART6_UART_Init(void){ huart6.Instance = USART6; huart6.Init.BaudRate = 115200; huart6.Init.WordLength = UART_WORDLENGTH_8B; huart6.Init.StopBits = UART_STOPBITS_1; hua...原创 2020-04-12 15:12:20 · 5042 阅读 · 0 评论 -
STM32CubeMX4 和 MX5共存
使用STM32CubeMX4,MX5新建的STM32工程,如何同时使用。分别安装MX4、MX5在不同的文件夹,然后把安装好的文件复制出来,当成绿色软件使用。新建快捷方式这样如果想编辑使用MX4建立的STM32工程,则先打开“STM32CubeMX427.exe”,从File中打开.ioc的STM32CubeMX工程文件。...原创 2020-04-11 18:36:35 · 501 阅读 · 0 评论 -
STM32 HAL实现串口中断接收
一、串口设置1. 异步模式2. 参数3. 中断使能4. 生成代码如下/* USART6 init function */static void MX_USART6_UART_Init(void){ huart6.Instance = USART6; huart6.Init.BaudRate = 115200; huart6.Init.WordLength = UA...原创 2020-03-28 17:20:58 · 4422 阅读 · 2 评论 -
STM32F4系统时基使用SysTick还是TIM1
一、SysTick选择时钟源SysTick1. SysTick选择时钟源SysTick. 2. 默认优先级,可以按需修改3. 自动生成的代码如下//stm32f4xx_hal_conf.h#define TICK_INT_PRIORITY ((uint32_t)0U) /*!< tick interrupt priority */ //...原创 2020-03-22 10:33:50 · 2174 阅读 · 0 评论 -
STM32实现串口printf函数打印
一、串口设置1. 异步模式2. 参数3. 只是作为发送,则可以不开中断4. 生成代码如下/* USART6 init function */static void MX_USART6_UART_Init(void){ huart6.Instance = USART6; huart6.Init.BaudRate = 115200; huart6.Init.WordL...原创 2020-03-21 21:49:42 · 3825 阅读 · 0 评论 -
STM32 HAL/LL混合库查询方式实现精确微秒延时
HAL与LL库查询方式实现精确微秒或毫秒延时,可以用于IO口模拟I2C、SPI通信等。通过HAL实现初始化5us初始化,后面在延时函数中可以再设置延时值。1. 定时器实现1us延时中断Enable不打钩复制必要库文件,.c/.h单独一个文件,设置好。生成代码如下:/* TIM3 init function */void MX_TIM3_Init(void){ TIM_C...原创 2020-03-21 09:06:22 · 2143 阅读 · 0 评论 -
STM32L071 IAP升级时“Cannot access target.Shutting down debug session”问题
STLink_V2调试STM32L071 IAP功能时,执行到FLASH_If_Erase()出现以下// 在以下代码中 增加1ms延时,解决问题。原因待解。HAL_StatusTypeDef HAL_FLASHEx_Erase(FLASH_EraseInitTypeDef *pEraseInit, uint32_t *PageError){ /* If the erase o...原创 2020-03-06 23:01:53 · 588 阅读 · 0 评论 -
STM32F103工程IAP设置
一、设置App程序1. APP工程新建Project_App这一新的Target切换到添加“IAP”宏定义2. 设置中断向量地址//用户程序地址#define APPLICATION_ADDRESS (uint32_t)0x08005000此处留0x5000=20K给Boot代码。3. 设置编译ROM区域0x5000 + 0xB000 = 0x10000 ...原创 2020-08-15 13:51:42 · 639 阅读 · 0 评论 -
STM32定时器笔记_中断方式_10ms
1. TIM 参考资料整理《STM32F10xxx参考手册.pdf》P.256当发生一个更新事件时,所有的寄存器都被更新,硬件同时(依据URS位)设置更新标志位(TIMx_SR寄存器中的UIF位)。 ● 预分频器的缓冲区被置入预装载寄存器的值(TIMx_PSC寄存器的内容)。 ● 自动装载影子寄存器被重新置入预装载寄存器的值(TIMx_ARR)。注:内部时钟(CK_INT)《[Refe...原创 2020-02-21 10:17:13 · 8813 阅读 · 0 评论