STM32串口一直进中断解决方法

解决STM32串口溢出中断问题(一直进中断服务函数) 现象:MCU为STM32L431,使用uCOS-III作为实时操作系统,使用串口接收升级数据包后,不能进行任务调度,发现程序没有跑飞,而是一直进入串口中断。串口的ISR寄存器如下: 串口中断服务函数的判断条件是: ```c if( SET == __HAL_UART_GET_IT_SOURCE(&huart[BLE_UART], UART_IT_RXNE)) { } 但是没有数据的情况下,也能进入,查看手册中串口中断描述: ![在这里插入图片描述](https://img-blog.c 阅读详情

今天在使用USART模块,遇到了一些问题并解决了,于是发贴共享。

问题描述:
在使用USART做串口通讯时,我只把接收中断打开,并设置抢占优先级为最低一个级别,而接收中断上一个优先级处理事情比较多,可能占用了2ms时间。当我使用9600波特率往下位机发送数据,速度非常快,就是一直按回车发!问题就出来,不到1分钟时间,通讯没有反应了。USART配置代码如下:

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. void uart_config(void)  
  2. {  
  3.     USART_InitTypeDef USART_InitStructure;  
  4.     USART_InitStructure.USART_BaudRate = UART_GetBaud(BaudRate);  
  5.     USART_InitStructure.USART_WordLength = USART_WordLength_8b;  
  6.     USART_InitStructure.USART_StopBits = USART_StopBits_1;  
  7.     USART_InitStructure.USART_Parity = USART_Parity_No;  
  8.     USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;  
  9.     USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;  
  10.     USART_InitStructure.USART_Clock = USART_Clock_Disable;  
  11.     USART_InitStructure.USART_CPOL = USART_CPOL_Low;  
  12.     USART_InitStructure.USART_CPHA = USART_CPHA_2Edge;  
  13.     USART_InitStructure.USART_LastBit = USART_LastBit_Enable;  
  14.     /* Configure USART1 */  
  15.     USART_Init(USART1, &USART_InitStructure);  
  16.     /* Enable USART1 receive interrupt */  
  17.     USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);  
  18.     /* Enable the USART1 */  
  19.     USART_Cmd(USART1, ENABLE);  
  20. }  

分析问题:

1.为什么没有通讯了?
通过仿真器仿真,发现程序一直进入接收中断中,由于我没有使用中断发送,于是程序就死在了接收中断,也就没有数据发送到电脑上来。接收中断代码如下:

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. void UART_Receive(void)  
  2. {  
  3.    //正在处理上一条通讯,接收到数据不处理  
  4.     if(bRecieveOK)  
  5.     {  
  6.         if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  
  7.             USART_ClearITPendingBit(USART1, USART_IT_RXNE);  
  8.         return;//processing receive data,don't receive again  
  9.     }  
  10.     if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  
  11.     {  
  12.         if(MoudBusExpir == 0)  
  13.         {  
  14.             ucRcePtr = 0;  
  15.             MoudBusExpir = 20;//50ms  
  16.         }  
  17.         else  
  18.             MoudBusExpir = 20;  
  19.         /* Read one byte from the receive data register */  
  20.         ucRS485Buff[ucRcePtr++] = USART_ReceiveData(USART1);  
  21.         /* Clear the USART1 Receive interrupt */  
  22.         USART_ClearITPendingBit(USART1, USART_IT_RXNE);  
  23.     }  
  24. }  

2.为什么会一直跑到接收中断?
断点之后发现(USART_GetITStatus(USART1, USART_IT_RXNE)==RESET的,也就是说没有数据接收到也进了中断,而且在USART配置中我也只打开了接收中断!没有数据送过来应该是不可能进入中断的!

3.响应了什么中断?
我想通过函数(USART_GetITStatus()把所有中断状态都读出来,但失败了,USART_IT_XXX所有中断状态都是RESET!也就是说没有中断也进入到这个中断服务程序来了!?

4.找资料
STM32F10x微控制器参考手册(2009年12月第10版)P541发现如下说明:

也就是说只要接收中断打开,即RXNEIE设置为1,那么ORE中断也自动打开了。
可是USART_GetITStatus(USART1, USART_IT_ORE )== RESET!!!!
找到USART_GetITStatus(USART1, USART_IT_RXNE)函数,发现只有当USART_IT_ERR中断使能时,才能读到ORE中断。
在这里要指出这个BUG:产生ORE中断了,但使用USART_GetITStatus()函数却无法读到这个中断被SET起来!

5.把ORE中断标志位清除
既然找到了是什么中断,那么把相应的中断标志位清除,就应该可以了吧?
USART_ClearITPendingBit(USART1, USART_IT_ORE);
但是,结果是没有任何效果!清除之后,马上读ORE中断状态,USART_GetITStatus(USART1, USART_IT_ORE)==RESET.程序仍然跑死在接收中断。再使用另一个函数USART_GetFlagStatus(USART1, USART_FLAG_ORE) = SET,原来ORE标志位还没有清除。

6.问题解决
为什么清除不掉?头疼了,再找找资料,有发现,在P523页如下图:


接收中断程序改为(注意这一句://注意!不能使用if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)来判断):

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. void UART_Receive(void)  
  2. {  
  3.     if (USART_GetFlagStatus(USART1, USART_FLAG_ORE) != RESET)//注意!不能使用if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)来判断  
  4.     {  
  5.         USART_ReceiveData(USART1);  
  6.     }  
  7.    //正在处理上一条通讯,接收到数据不处理  
  8.     if(bRecieveOK)  
  9.     {  
  10.         if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  
  11.             USART_ClearITPendingBit(USART1, USART_IT_RXNE);  
  12.         return;//processing receive data,don't receive again  
  13.     }  
  14.     if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  
  15.     {  
  16.         if(MoudBusExpir == 0)  
  17.         {  
  18.             ucRcePtr = 0;  
  19.             MoudBusExpir = 20;//50ms  
  20.         }  
  21.         else  
  22.             MoudBusExpir = 20;  
  23.         /* Read one byte from the receive data register */  
  24.         ucRS485Buff[ucRcePtr++] = USART_ReceiveData(USART1);  
  25.         /* Clear the USART1 Receive interrupt */  
  26.         USART_ClearITPendingBit(USART1, USART_IT_RXNE);  
  27.     }  
  28. }  

总结:
注意问题: 1.USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);使能了接收中断,那么ORE中断也同时被开启了。
               2.ORE中断只能使用USART_GetFlagStatus(USART1, USART_FLAG_ORE) 读到(没有使能USART_IT_ERR中断时)

BUG建议: 1.在STM32库中,能不能修改USART_GetITStatus()函数对USART_IT_ORE中断的处理? 也就是我只要打开了接收中断,那么有ORE中断时,我也能使用USART_GetITStatus(USART1,USART_IT_ORE)读到.
       其它:在找资料的同时,发现STM32F10x微控制器参考手册(2009年12月第10版)中文翻译P538有错误,如下图:


英文P696如下图:






我很会写BUG ——第一篇,STM32中断函数的重复定义 今天配置Usart.c和Usart.h串口通讯文件时编译后报错。 Error: L6200E: Symbol USART1_IRQHandler multiply defined (by usart.o and stm32f10x_it.o). Not enough information to list image symbols. Not enough information to list load addresses in the image map. 经过了漫长的检查,发现程序本身的编写. 阅读详情

相关推荐

STM32的USART串口通讯程序

文章目录 文章目录文章目录寄存器与固态库一、了解串口通信及准备工作1.串口通信简介2.STM32 的 USART 简介3.实验环境二、USART串口实验总结 寄存器与固态库 基于寄存器与基于固件库的stm32 LED流水灯例子的编程方式差异比较: 1、基于寄存器方式的开发特点: (1)具体参数更直观; (2)程序运行占用资源少。 (3)寄存器更贴近底层,对外设的工作原理和运行机理会有更深的理解 (4)寄存器版式直接对内部寄存器进行操作,需要我们对寄存器非常熟悉 它的缺陷也不可忽视,如下: (1)开发速度

big_west的博客 6233

USART1_IRQHandler 函数

到了这一步,就说明这一串数据已经完完全全的接收完了USART_RX_STA = 1100 0000 0000 0100,最高位为1:代表接收到了0x0a,第十四位为1:代表接收到了0x0d,第0位到第13位为4,代表接收到了4位有效数据(a、b、c、d)我们可以清晰的看到bit13~0位是4,代表接收到了4个数据(a,b,c,d),第14位为1,是因为接收到了数据0x0d,也和最上面给的表对上了,然后程序向下执行,接收到了0x0d(回车),那下一个就是接收0x0a(换行)了。...

C语言学习 1万+

stm32cubemx下stm32中断与串口DMA通信

一、外部中断知识点 二、外部中断,实现LED亮熄 1.创建工程

qq_60678931的博客 4345

正点原子STM32-串口中断服务函数USART1_IRQHandler关于USART_RX_STA的学习笔记

正点原子STM32-串口中断服务函数USART1_IRQHandler关于USART_RX_STA的学习笔记

weixin_51361165的博客 1万+

STM32 不断进入串口中断问题 解决方法

本文主要阐述如何解决STM32 不断进入中断,却无数据,无法清除中断的问题

LingYiZhangFanKai的专栏 1万+

STM32的CubeMX关于串口中断接

作为刚工作不久的小白,刚接触STM32的HAL库,工作中使用到了,就记录下自己遇到的问题,希望看到的大佬多多指教。 1、关于串口的初始化函数:     MX_USART2_UART_Init()---波特率、奇偶校验等配置             HAL_UART_Init()---会将 huart->RxState = HAL_UART_STATE_READY;     HAL_U...

qq_41092963的博客 9529

STM32使用SRAM方式仿真不进串口中断的解决方法

在时钟设置语句中或在main.c初始化语句中加入:    NVIC_SetVectorTable(0x20000000,0x0); 原理是让中断向量表映射到SRAM中。

boyfig的博客 1692

【MCU开发规范】:车载MCU开发规范

车载MCU开发规范

1051

STM32串口空闲中断 上电就进IDLE(空闲中断)分析及解决方法

/使能串口空闲中断。在配置stm32f0单片机串口DMA空闲接收时,发现程序一上电就会跳入中断函数(没有发送数据)将以下两行配置代码置于配置最末端(即初始化所有串口相关功能后再开启中断和使能串口)USART_Cmd(USART1, ENABLE);查找帮助时发现了一篇文章。

qq_66218338的博客 1753

Python:同花顺全数据接口

# -*- coding: utf-8 -*- from iFinDPy import * from datetime import datetime import pandas as pd import time as _time import json from threading import Thread,Lock,Semaphore import requests sem = Semaphore(5) # 此变量用于控制最大并发数 dllock = Lock() #此变量用来控制实时行情推

代码过客 4万+

Bentley二次开发教程28-交互窗口-案例实战2-EC属性赋值工具

该工具会根据用户输入的路径获取Schema文件的路径,然后通过路径读取对应的Schema文件并在树状图中显示EC类,当用户选择树状图上的节点时,此时会触发事件,根据EC属性添加用户自定义控件用于显示EC属性并可对其进行赋值操作。完成后选取元素,点击界面上的应用,此时元素会被赋予指定EC类,同时修改的EC属性值也会被同步赋予。该工具涉及到的WinForm控件有:TextBox,Button,TreeView,Panel,UserControl(用户自定义控件)。

不见不散的博客 1475

STM32 HAL 库串口 DMA + 空闲中断接收不定长数据:从原理到排查“上电误进 IDLE“

本文提出了一种基于STM32的嵌入式串口通信优化方案,通过DMA+串口空闲中断(IDLE)实现不定长数据的高效接收。相比传统定长轮询或逐字节中断方式,该方案在115200波特率下可实现零丢帧率,CPU占用率从38%降至1%以下。文章详细解析了IDLE中断的触发机制(总线空闲超过1字节时间即86.8μs),给出了CubeMX配置要点和核心代码实现,并重点解决了"上电误触发IDLE中断"的常见问题。实测表明,该方法能稳定处理1-512字节随机长度数据,帧结束检测延迟仅87.2μs,为高波特率大数据量场景提供了可

嵌入式毕设/课设资料清单(速查手册·文档模板·题库,持续更新)→ 见最新文章 876

电磁波成像技术全解析:从γ射线到无线电波的应用实践

本文全面解析电磁波成像技术,从γ射线到无线电波的应用实践。详细介绍了不同波长电磁波的特性与实用场景,包括医疗影像、工业检测、安防监控等领域。特别探讨了X射线、红外热成像、毫米波雷达等前沿技术的实战应用,为读者提供技术选型指南和操作技巧。

weixin_29305337的博客 293

STM32串口中断卡死主循环一直进中断问题分析

在一项目中,使用STM32作为主控,程序运行一段时间后概率出现主循环卡死现象。 问题分析如下: 1、程序USART2不停接收并处理串口数据,波特率115200; 2、主循环卡死; 3、USART1中断及TIM2中断响应函数运行正常;(USART1及TIM2中断优先级均比USART2高) 4、出现现象后,拔掉USART2的接收数据线,现象不能回复正常; 5、出现现象后,拔掉后再插入US...

xiahailong90的博客 2万+

Claude Code 处理长任务 + Cursor 专注交互:双栈协作的 3 种分工场景与响应提速 35% 实测

揭示 Claude Code 与 Cursor 在 AI 编程中的本质分工:Claude Code 作为离线式架构师处理跨文件、带约束的长链路重构(如单体拆微服务),Cursor 作为现场交互工程师专注秒级局部编辑;提出按任务切片动态切换的三种工程化协作场景,并给出结构化上下文构建、约束型 Prom

weixin_28728443的博客 123

K8s-K8s部署Zookeeper+Kafka+ELFK+持久化数据

K8s环境下容器化部署`Zookeeper+Kafka+ELFK`日志收集系统

✅ 专注企业级 Linux/DevOps 运维的实战派 ✅ 已输出上百篇可落地方案 ✅ Shell 脚本开箱即用 ✅ K8s/YAML 环境验证 ✅ 故障排查链路完整复现 1916

STM32CubeMX-串口中断实验

文章目录STM32CubeMX笔记-串行口中断接收一、初始准备1.硬件平台2.软件平台二、操作步骤1.CubeMX生成初始化代码2.Keil编写串口中断回调函数3.程序下载,观察现象三、源码仓库 STM32CubeMX笔记-串行口中断接收 一、初始准备 1.硬件平台 使用正点原子STM32F4探索者 2.软件平台 STM32CubeMX软件平台 Keil5软件平台 STM32CubeProgrammer下载平台 二、操作步骤 1.CubeMX生成初始化代码 芯片选择 打开cube软件,点击MCU选择

嵌入式学习记录站点 1万+

1. 在 SAP ABAP 事物码 SEGW 里创建 SAP OData 项目

本文介绍如何在 SAP ABAP 事物码 SEGW 里创建 SEGW 项目,使用工具生成 Runtime 运行时需要的资源。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 5446

STM32 串口中断总结

本文以USART1为例,叙述串口中断的编程过程。 1、先来讲述一下在应用串口中断时涉及到的一些库文件。 首先对于STM32外设库文件的应用编程,misc.c和stm32f10x_rcc.c是肯定要添加到。 接下来就是我们要用到的相关外设了。毫无疑问,串口文件stm32f10x_usart.c是必须的。串口通信是对通用GPIO端口引脚的功能复用,所以还需要stm32f10x_gpi

richardgann的博客 5万+

【OS】AUTOSAR OS系统调用产生Trap的过程详解

AUTOSAR OS系统调用产生Trap的过程详解

qq_36056498的博客 2440

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

STM32串口中断卡死主循环一直进中断问题

这篇STM32串口中断卡死问题 原作者写的太好了,特意转载一下 在一项目中,使用STM32作为主控,程序运行一段时间后概率出现主循环卡死现象。 问题分析如下: 1、程序USART2不停接收并处理串口数据,波特率115200; 2、主循环卡死; 3、USART1中断及TIM2中断响应函数运行正常;(USART1及TIM2中断优先级均比USART2高) 4、出现现象后,拔掉USART2的接收数据线,现象不能回复正常; 5、出现现象后,拔掉后再插入USART2的接收数据线,现象不能回复正常; 6

li348858320的博客 8024

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

STM32串口之空闲中断

背景 在做Nbiot的一个路灯项目,NBiot模块一般都是串口接口,使用AT指令集,对接中国移动onenet平台。先用串口助手去测试,流程测试OK之后需要在MCU上重新写一遍。一开始用的STC15系列的MCU,然后跟平台之间对接协议很多,代码量较大,所以换到了STM32F1系列的MCU。 在STC15MCU上面通过串口接收数据只能老老实实用接收中断来做,每接收一帧数据都需要判断帧头帧尾,一帧结束再处理。之前就听说过STM32串口上面有帧中断,一直没有用过,然后才有了这篇博...

#elseif 1万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【STM32的HAL库开发】CubeMX配置HAL库,不进串口中断的问题

【STM32的HAL库开发】串口中断开发环境在main.c添加代码(1/2)在stm32f4xx_it.c添加代码(2/2)注意附代码 开发环境 cubemx V5.5.0 + MDK Keil V5.29.0.0 + STM32F429NIH 在main.c添加代码(1/2) 在main函数中,初始化uart后执行 ==__HAL_UART_ENABLE_IT(&huart1,UART_...

qq_41100189的博客 8922

STM32的串口中断详解

中断配置 使能接收中断 中断服务函数 1. 中断服务函数名称查找 2. 中断服务函数 3. 可以选择的串口中断类型 此处定义 其他文件中的声明 extern u8 USART_RX_BUF[USART_REC_LEN] 最大接收字节数 extern u16 USART_RX_STA 接收状态标记 extern u16 USART_RX_STA bit15 bit14 bit13~0 接收完成标志 接收到0x0D标...

Code for Coffee 1万+
上一篇: stm32L151串口中断假如发送一个字节0x36,串口中断总是接收到0x00,连续点击几次发送,才能接收到0x36
下一篇: java16进制字符串与字符串互相转换
小白study
博客等级 码龄12年 659粉丝 25原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值