电子发烧友网 > 控制/MCU > 正文

STM32 UART2发送后中断的原因是什么?

2018年06月07日 08:07 次阅读

SECTION 2

先说TC。即Transmission Complete。发送一个字节后才进入中断,这里称为“发送后中断”。和原来8051的TI方式一样,都是发送后才进中断,需要在发送函数中先发送一个字节触发中断。发送函数如下

陆奇为何要离开百度,接下来的百度会向何方发展

/*******

功能:中断方式发送字符串。采用判断TC的方式。即 判断 发送后中断 位。

输入:字符串的首地址

输出:无

*******/

void USART_SendDataString( u8 *pData )

{

pDataByte = pData;

USART_ClearFlag(USART1, USART_FLAG_TC);//清除传输完成标志位,否则可能会丢失第1个字节的数据。网友提供。

USART_SendData(USART1, *(pDataByte++) ); //必须要++,不然会把第一个字符t发送两次

}

中断处理函数如下

/********

* FuncTIon Name : USART1_IRQHandler

* DescripTIon : This function handles USART1 global interrupt request.

* Input : None

* Output : None

* Return : None

*********/

void USART1_IRQHandler(void)

{

if( USART_GetITStatus(USART1, USART_IT_TC) == SET )

{

if( *pDataByte == ‘\0’ )//TC需要 读SR+写DR 方可清0,当发送到最后,到‘\0’的时候用个if判断关掉

USART_ClearFlag(USART1, USART_FLAG_TC);//不然TC一直是set, TCIE也是打开的,导致会不停进入中断。 clear掉即可,不用关掉TCIE

else

USART_SendData(USART1, *pDataByte++ );

}

}

其中u8 *pDataByte;是一个外部指针变量

在中断处理程序中,发送完该字符串后,不用关闭TC的中断使能TCIE,只需要清掉标志位TC;这样就能避免TC == SET 导致反复进入中断了。

串口初始化函数如下

/*********

名称: USART_Config

功能: 设置串口参数

输入: 无

输出: 无

返回: 无

**********/

void USART_Config()

{

USART_InitTypeDef USART_InitStructure;//定义一个包含串口参数的结构体

USART_InitStructure.USART_BaudRate = 9600; //波特率9600

USART_InitStructure.USART_WordLength = USART_WordLength_8b;//8位数据位

USART_InitStructure.USART_StopBits = USART_StopBits_1;//1位停止位

USART_InitStructure.USART_Parity = USART_Parity_No;//无校验

USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件流控制

USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//输入加输出模式

USART_InitStructure.USART_Clock = USART_Clock_Disable;//时钟关闭

USART_InitStructure.USART_CPOL = USART_CPOL_Low;

USART_InitStructure.USART_CPHA = USART_CPHA_2Edge;

USART_InitStructure.USART_LastBit = USART_LastBit_Disable;

USART_Init(USART1, &USART_InitStructure);//设置到USART1

USART_ITConfig(USART1, USART_IT_TC, ENABLE);//Tramsimssion Complete后,才产生中断。 开TC中断必须放在这里,否则还是会丢失第一字节

USART_Cmd(USART1, ENABLE); //使能USART1

}

这里请问一个问题:开TC中断USART_ITConfig()如果放在我的USART_SendDataString()中再开,会丢失字符串的第一字节。必须放在串口初始化函数中才不会丢。不知道为什么??

这里笔者可以给出解释,你看下SECTION1 就可以知道为什么呢,你这样做的原理和SECTION1讲解的差不多,就相当于延时,而你后面没有丢失数据的主要原因就是你代码中有这么一句 USART_ClearFlag(USART1, USART_FLAG_TC);//清除传输完成标志位,否则可能会丢失第1个字节的数据。网友提供。

再说判断TXE。即Tx DR Empty,发送寄存器空。当使能TXEIE后,只要Tx DR空了,就会产生中断。所以,发送完字符串后必须关掉,否则会导致重复进入中断。这也是和TC不同之处。

发送函数如下:

/*******

功能:中断方式发送字符串。采用判断TC的方式。即 判断 发送后中断 位。

输入:字符串的首地址

输出:无

*******/

void USART_SendDataString( u8 *pData )

{

pDataByte = pData;

USART_ITConfig(USART1, USART_IT_TXE, ENABLE);//只要发送寄存器为空,就会一直有中断,因此,要是不发送数据时,把发送中断关闭,只在开始发送时,才打开。

}

中断处理函数如下:

/********

* Function Name : USART1_IRQHandler

* Description : This function handles USART1 global interrupt request.

* Input : None

* Output : None

* Return : None

********/

void USART1_IRQHandler(void)

{

if( USART_GetITStatus(USART1, USART_IT_TXE) == SET )

{

if( *pDataByte == ‘\0’ )//待发送的字节发到末尾NULL了

USART_ITConfig(USART1, USART_IT_TXE, DISABLE);//因为是 发送寄存器空 的中断,所以发完字符串后必须关掉,否则只要空了,就会进中断

else

USART_SendData(USART1, *pDataByte++ );

}

}

在串口初始化函数中就不用打开TXE的中断了(是在发送函数中打开的)如下:

/************

名称: USART_Config

功能: 设置串口参数

输入: 无

输出: 无

返回: 无

************/

void USART_Config()

{

USART_InitTypeDef USART_InitStructure;//定义一个包含串口参数的结构体

USART_InitStructure.USART_BaudRate = 9600; //波特率9600

USART_InitStructure.USART_WordLength = USART_WordLength_8b;//8位数据位

USART_InitStructure.USART_StopBits = USART_StopBits_1;//1位停止位

USART_InitStructure.USART_Parity = USART_Parity_No;//无校验

USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件流控制

USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//输入加输出模式

USART_InitStructure.USART_Clock = USART_Clock_Disable;//时钟关闭

USART_InitStructure.USART_CPOL = USART_CPOL_Low;

USART_InitStructure.USART_CPHA = USART_CPHA_2Edge;

USART_InitStructure.USART_LastBit = USART_LastBit_Disable;

USART_Init(USART1, &USART_InitStructure);//设置到USART1

USART_Cmd(USART1, ENABLE); //使能USART1

}

SECTION 3

在USART的发送端有2个寄存器,一个是程序可以看到的USART_DR寄存器(下图中阴影部分的TDR),另一个是程序看不到的移位寄存器。

对应USART数据发送有两个标志,一个是TXE=发送数据寄存器空,另一个是TC=发送结束;对照下图,当TDR中的数据传送到移位寄存器后,TXE被设置,此时移位寄存器开始向TX信号线按位传输数据,但因为TDR已经变空,程序可以把下一个要发送的字节(操作USART_DR)写入TDR中,而不必等到移位寄存器中所有位发送结束,所有位发送结束时(送出停止位后)硬件会设置TC标志。

另一方面,在刚刚初始化好USART还没有发送任何数据时,也会有TXE标志,因为这时发送数据寄存器是空的。

TXEIE和TCIE的意义很简单,TXEIE允许在TXE标志为‘1’时产生中断,而TCIE允许在TC标志为‘1’时产生中断。

至于什么时候使用哪个标志,需要根据你的需要自己决定。但我认为TXE允许程序有更充裕的时间填写TDR寄存器,保证发送的数据流不间断。TC可以让程序知道发送结束的确切时间,有利于程序控制外部数据流的时序。

SECTION 4

总的来说,STM32单片机的串口还是很好理解的,编程也不算复杂。当然我更愿意希望其中断系统和51单片机一样的简单。

对于接收终端,就是RXNE了,这只在接收完成后才产生,在执行USART_ITConfig(USART1, USART_IT_RXNE, ENABLE)代码时不会进入ISR。但麻烦的就是发送有关的中断了:TXE或者TC,根据资料和测试的结果,TXE在复位后就是置1的,即在执行USART_ITConfig(USART1, USART_IT_TXE, ENABLE)后会立即产生中断请求。因此这造成一个麻烦的问题:如果没有真正的发送数据,TXE中断都会发生,而且没有休止,这将占用很大部分的CPU时间,甚至影响其他程序的运行!

因此建议的是在初始化时不好启用TXE中断,只在要发送数据(尤其是字符串、数组这样的系列数据)时才启用TXE。在发送完成后立即将其关闭,以免引起不必要的麻烦。

对于发送,需要注意TXE和TC的差别——这里简单描述一下,假设串口数据寄存器是DR、串口移位寄存器是SR以及TXD引脚TXDpin,其关系是DR-》SR-》TXDpin。当DR中的数据转移到SR中时TXE置1,如果有数据写入DR时就能将TXE置0;如果SR中的数据全部通过TXDpin移出并且没有数据进入DR,则TC置1。并且需要注意TXE只能通过写DR来置0,不能直接将其清零,而TC可以直接将其写1清零。

对于发送单个字符可以考虑不用中断,直接以查询方式完成。

对于发送字符串/数组类的数据,唯一要考虑的是只在最后一个字符发送后关闭发送中断,这里可以分为两种情况:对于发送可显示的字符串,其用0x00作为结尾的,因此在ISR中就用0x00作为关闭发送中断(TXE或者TC)的条件;第二种情况就是发送二进制数据,那就是0x00~0xFF中间的任意数据,就不能用0x00来判断结束了,这时必须知道数据的具体长度。

这里简单分析上面代码的执行过程:TXE中断产生于前一个字符从DR送入SR,执行效果是后一个字符送入DR。对于第一种情况,如果是可显示字符,就执行USART_SendData来写DR(也就清零了TXE),当最后一个可显示的字符从DR送入SR之后,产生的TXE中断发现要送入DR的是字符是0x00——这当然不行——此时就关闭TXE中断,字符串发送过程就算结束了。当然这时不能忽略一个隐含的结果:那就是最后一个可显示字符从DR转入SR后TXE是置1的,但关闭了TXE中断,因此只要下次再开启TXE中断就会立即进入ISR。对于第二种情况,其结果和第一种的相同。

对于第一种情况,其程序可以这么写:其中TXS是保存了要发送数据的字符串,TxCounter1是索引值:

extern __IO uint8_t TxCounter1;

extern uint8_t *TXS;

extern __IO uint8_t TxLen;

void USART1_IRQHandler(void)

{

if(USART_GetITStatus(USART1, USART_IT_TXE) != RESET)

{

if(TXS[TxCounter1]) //如果是可显示字符

{ USART_SendData(USART1,TXS[TxCounter1++]);}

else //发送完成后关闭TXE中断,

{ USART_ITConfig(USART1,USART_IT_TXE,DISABLE);}

}

}

对于第二种情况,和上面的大同小异,其中TXLen表示要发送的二进制数据长度:

void USART1_IRQHandler(void)

{

if(USART_GetITStatus(USART1, USART_IT_TXE) != RESET) //对USART_DR的写操作,将该位清零。

{

if(TxCounter1《TxLen)

{ USART_SendData(USART1,TXS[TxCounter1++]);}

else //发送完成后关闭TXE中断

{ USART_ITConfig(USART1,USART_IT_TXE,DISABLE);}

}

}

事实上第一种情况是第二种的特殊形式,就是说可以用第二种情况去发送可显示的字符——当然没人有闲心去数一句话里有多少个字母空格和标点符号!

在使用时,只要将TXS指向要发送的字符串或者数组,设置TxLen为要发送的数据长度,然后执行USART_ITConfig(USART1, USART_IT_TXE,ENABLE)就立即开始发送过程。用户可以检查TxCounter1来确定发送了多少字节。比如以第二种情况为例:

uint32_t *TXS;

uint8_t TxBuffer1[]=“0123456789ABCDEF”;

uint8_t DST2[]=“ASDFGHJKL”;

__IO uint8_t TxLen = 0x00;

TxLen=8; //发送8个字符,最终发送的是01234567

TXS=(uint32_t *)TxBuffer1; //将TXS指向字符串TxBuffer1

TxCounter1=0; //复位索引值

USART_ITConfig(USART1, USART_IT_TXE,ENABLE); //启用TXE中断,即开始发送过程

while(TxCounter1!=TxLen); //等待发送完成

TXS=(uint32_t *)TxBuffer2; //同上,最终发送的是ASDFGHJK

TxCounter1=0;

USART_ITConfig(USART1, USART_IT_TXE,ENABLE);

while(TxCounter1!=TxLen);

以上就是我认为的最佳方案,但串口中断方式数据有多长就中断多少次,我认为还是占用不少CPU时间,相比之下DMA方式就好多了,因为DMA发送字符串时最多中断两次(半传输完成,全传输完成),并且将串口变成类似16C550的器件。

技术专区

关注电子发烧友微信

有趣有料的资讯及技术干货

下载发烧友APP

打造属于您的人脉电子圈

关注发烧友课堂

锁定最新课程活动及技术直播
收藏 人收藏
分享:

评论

相关推荐

由stm32产生的频率分别为10khz和30khz的方波,请问如何经过滤波处理产生频率不变?

发表于 2018-06-06 18:37 24次阅读
由stm32产生的频率分别为10khz和30khz的方波,请问如何经过滤波处理产生频率不变?

关于方波转正弦波,请问如何经过滤波处理产生频率不变,峰峰值分别为6V和2V的无明显失真的正弦波信号?

发表于 2018-06-05 23:08 88次阅读
关于方波转正弦波,请问如何经过滤波处理产生频率不变,峰峰值分别为6V和2V的无明显失真的正弦波信号?

nand flash 擦除、页编程、页读取(调用readpage函数读取出的全是FF是怎么回事?)

发表于 2018-06-05 10:16 193次阅读
nand flash 擦除、页编程、页读取(调用readpage函数读取出的全是FF是怎么回事?)

ST/GD/Microchip 型号如何命名

发表于 2018-06-04 18:24 62次阅读
ST/GD/Microchip 型号如何命名

STM32 TIM 的不同通道输出不同频率的PWM波

发表于 2018-06-04 17:15 77次阅读
STM32 TIM 的不同通道输出不同频率的PWM波

意法半导体2018年股东大会全部提案获批

发表于 2018-06-04 14:28 176次阅读
意法半导体2018年股东大会全部提案获批

stm32的SPI3_SCK只有4个半字节的波形是为什么?造成数据不能收发该如何解决?

发表于 2018-06-04 14:26 96次阅读
stm32的SPI3_SCK只有4个半字节的波形是为什么?造成数据不能收发该如何解决?

意法半导体推出新一代智能物品安全芯片,配备欧洲市政设施认证保护配置文件

发表于 2018-06-04 11:18 182次阅读
意法半导体推出新一代智能物品安全芯片,配备欧洲市政设施认证保护配置文件

意法半导体高集成度四通道低边开关,为智能自动化带来丰富的诊断功能

发表于 2018-06-04 10:37 203次阅读
意法半导体高集成度四通道低边开关,为智能自动化带来丰富的诊断功能

教你怎么用Atollic TrueStudio ...

ST之前发布了Atollic TrueStudio 9.0版本软件开发工具,为STM32用户提供全免...

发表于 2018-06-04 09:40 1376次阅读
教你怎么用Atollic TrueStudio ...

stm32通过串口给cc2530更新固件后固件一直重启,请问是什么原因?

发表于 2018-06-01 06:11 19次阅读
stm32通过串口给cc2530更新固件后固件一直重启,请问是什么原因?

通过CAN_BTR寄存器控制LBKM和SILM

每组过滤器组必须关联且只能关联一个 FIFO。复位默认都关联到 FIFO_0。所谓“关联”是指假如收...

发表于 2018-05-31 08:54 921次阅读
通过CAN_BTR寄存器控制LBKM和SILM

看看大神是怎么做LPC中的中断处理

近来在LPC的中断过程上看了点文献,作为一个初学者感觉这个内容与其它的处理器还是有很大的区别,比如说...

发表于 2018-05-29 15:02 79次阅读
看看大神是怎么做LPC中的中断处理

基于STM32F103系列单片机的无线解说器

本实例是以STM32F103系列单片机作为核心处理器,利用VS1003芯片进行音频解码的一种无线解...

发表于 2018-05-25 10:00 1343次阅读
基于STM32F103系列单片机的无线解说器

STM32的三种串口通信协议介绍

本文首先介绍了STM32串口硬件电路及串口编程,其次介绍了STM32的三种串口通信协议,最后介绍了S...

发表于 2018-05-25 09:33 1408次阅读
STM32的三种串口通信协议介绍

基于北斗卫星系统的机载高速摄像机时间同步器

在民用飞机飞行试验中,为了保证图像测试数据的准确可靠,机上图像测试系统中不同测试设备时间需要严格的统...

发表于 2018-05-25 08:24 557次阅读
基于北斗卫星系统的机载高速摄像机时间同步器

基于STM32的语音导览系统的设计方案

景点语音导览主要有以下几种方式:一种是通过全球定位系统(GPS)的用户终端接收工作卫星的导航信息,从...

发表于 2018-05-25 08:01 1206次阅读
基于STM32的语音导览系统的设计方案

基于STM32C8T6的四旋翼飞行器控制系统硬...

本文基于四旋翼飞行器的工作原理和性能特点,设计了飞行器控制系统的硬件电路。系统包含微控制器模块、姿态...

发表于 2018-05-24 16:37 1775次阅读
 基于STM32C8T6的四旋翼飞行器控制系统硬...

STM32的优势在哪里?如何使用DMA来进行AD...

STM32的优点在哪里? 除去宣传环节,细细分析。 STM32时钟不算快,72MHZ, 也不能扩展...

发表于 2018-05-22 07:32 252次阅读
STM32的优势在哪里?如何使用DMA来进行AD...

STM32串口实现485双机通信的原理

如果按键按下了,就会发送数据,就会产生接收中断,就会往我们定义的接收缓冲区(RS485_RX_BUF...

发表于 2018-05-21 17:27 714次阅读
STM32串口实现485双机通信的原理

ad7606与stm32连接电路介绍

本文首先对stm32产品概述及特性进行了介绍,其次介绍了AD7606相关概念,最后介绍了ad7606...

发表于 2018-05-21 11:45 319次阅读
ad7606与stm32连接电路介绍

一文了解STM32窗口看门狗的真正作用

STM32有2个看门狗:独立看门狗和窗口看门狗。 独立看门狗IWDG--独立于系统之外,因为有独立...

发表于 2018-05-20 10:17 614次阅读
一文了解STM32窗口看门狗的真正作用

如何判断STM32的复位类型_STM32软件复位...

上电复位,是为了为程序的开始作好准备,强制的所有的数据清零,它必须要从零开始。

发表于 2018-05-20 10:06 624次阅读
如何判断STM32的复位类型_STM32软件复位...

STM32F0多路ADC采样中的BUG和解决方案

使用CUBE生产的ADC无法配置多路采样,多路采样采集值不对,研究后发现是底层函数没有将CHANNE...

发表于 2018-05-18 15:01 144次阅读
STM32F0多路ADC采样中的BUG和解决方案

一文解析stm32产生spwm原理及程序

SPWM(Sinusoidal PWM)法是一种比较成熟的,目前使用较广泛的PWM法。SPWM法就是...

发表于 2018-05-18 09:11 2501次阅读
一文解析stm32产生spwm原理及程序

stm32休眠_RTC定时唤醒来喂狗

在STM32开发中经常会用到独立看门狗(IWDG)和低功耗模式,看门狗是为了检测和解决由软件错误引起...

发表于 2018-05-18 01:56 142次阅读
stm32休眠_RTC定时唤醒来喂狗

STM32独立看门狗和低功耗模式_RTC定时唤醒...

在STM32开发中经常会用到独立看门狗(IWDG)和低功耗模式,看门狗是为了检测和解决由软件错误引起...

发表于 2018-05-18 01:55 116次阅读
STM32独立看门狗和低功耗模式_RTC定时唤醒...

STM32独立看门狗介绍_STM32单片机独立看...

STM32的独立看门狗由内部专门的40Khz低速时钟驱动,即使主时钟发生故障,它也仍然有效。这里需要...

发表于 2018-05-18 01:49 115次阅读
STM32独立看门狗介绍_STM32单片机独立看...

基于STM32内置ADC实现简易示波器的程序设计...

ADC转换:STM32增强型芯片内置的2个独立ADC,可以有16个通道,并且2个通道可以并行的同步采...

发表于 2018-05-18 01:44 345次阅读
基于STM32内置ADC实现简易示波器的程序设计...

STM32单片机的模拟看门狗的库函数设置

ADC的模拟看门狗用于检查电压是否越界。他又上下两个边界,可分别在寄存器ADC_HTR和ADC_LT...

发表于 2018-05-18 01:29 86次阅读
STM32单片机的模拟看门狗的库函数设置

一文看懂stm32的引脚的两种用途:GPIO和A...

stm32的引脚有两种用途:GPIO(generalpurposeio)和AFIO(alternat...

发表于 2018-05-18 01:22 213次阅读
一文看懂stm32的引脚的两种用途:GPIO和A...

STM32的ADC简介_DMA方式的程序设计与实...

ADC(Analog-to-Digital Converter,模/ 数转换器)。也就是将模拟信号...

发表于 2018-05-18 01:12 252次阅读
STM32的ADC简介_DMA方式的程序设计与实...

一文读懂STM32之独立看门狗/窗口看门狗的原理

STM32的独立看门狗由内部专门的40Khz低速时钟驱动,即主时钟发生故障,它也仍然有效,这里我们需...

发表于 2018-05-18 01:06 99次阅读
一文读懂STM32之独立看门狗/窗口看门狗的原理

ST MCU的生态系统:物联网催生新服务 STM...

生态系统原意是指在一定的地域内,生物与环境形成的统一的整体。随着经济社会的发展,现在我们提到生态系统...

发表于 2018-05-17 17:16 706次阅读
ST MCU的生态系统:物联网催生新服务 STM...

窗口看门狗的作用是什么?窗口看门狗复位分析

程序初始化LED点亮延时300ms熄灭,窗口看门狗从0x7F开始递减计数,上窗口为0x5F,下窗口为...

发表于 2018-05-17 13:54 172次阅读
窗口看门狗的作用是什么?窗口看门狗复位分析

STM32看门狗WWDG和IWDG的区别是什么

STM32有2个看门狗:独立看门狗和窗口看门狗。 独立看门狗IWDG:独立于系统之外,因为有独立时...

发表于 2018-05-17 13:51 81次阅读
STM32看门狗WWDG和IWDG的区别是什么

stm32驱动ad9854程序分享_ad9854...

AD9854数字合成器是高集成度的器件。本文首先介绍了ad9854优势和特点,其次介绍了ad9854...

发表于 2018-05-17 09:23 498次阅读
stm32驱动ad9854程序分享_ad9854...

STM32调试步骤

调试前,首先跳线J9的2-3脚短接,跳线J4的右边两个脚短接,跳线J5短接,J8短接,J2的1-2短...

发表于 2018-05-16 10:42 671次阅读
STM32调试步骤

了解TrueSTUDIO9.0给STM32开发带...

现在ST正式发布整合后第一个Atollic TrueSTUDIO版本 9.0,正式为STM32用户提...

发表于 2018-05-16 09:24 1233次阅读
了解TrueSTUDIO9.0给STM32开发带...

AVRNET源码并移植STM32 ARP和Eth...

eth_generate_header函数实现了填充以太网首部的功能,第一个输入参数为发送接收缓冲区...

发表于 2018-05-15 09:15 203次阅读
AVRNET源码并移植STM32 ARP和Eth...

STM32中的位带(bit-band)操作

位带别名区的字只有 LSB 有意义。另外,在访问位带别名区时,不管使用哪一种长度的数据传送指令(字/...

发表于 2018-05-13 09:28 372次阅读
STM32中的位带(bit-band)操作

STM32单片机的串口通信波特率计算方法

不管是什么单片机,在使用串口通信的时候,有一个非常重要的参数:波特率。什么是波特率:波特率就是每秒传...

发表于 2018-05-10 11:49 855次阅读
STM32单片机的串口通信波特率计算方法

全球MCU市场1/5归ST,中国CAGR达27%

【导读】ST通用STM32 MCU斩获全球1/5市场份额,中国市场2017年MCU出货量排名第二,连...

发表于 2018-05-10 11:10 824次阅读
全球MCU市场1/5归ST,中国CAGR达27%

STM32之RS485通讯方式实现

在设计中,我们经常使用一个名为Max485的芯片来完成TTL电平至差分电平的转换,这款芯片有一个DE...

发表于 2018-05-10 06:31 270次阅读
STM32之RS485通讯方式实现

关于STM32配置中断和GPIO针脚问题

嵌入式软体搭配最新版的STM32CubeMX个人电 脑开发 工具使用, 设计人员 可在绘图介面向导内...

发表于 2018-05-10 02:41 291次阅读
关于STM32配置中断和GPIO针脚问题

STM32之软件CRC和硬件CRC速度测试

软件提前生成CRC表,用于查询。分别使用软件CRC算法和硬件CRC外设对一个缓存进行计算,目的是从该...

发表于 2018-05-09 11:45 138次阅读
STM32之软件CRC和硬件CRC速度测试

STM32F407V芯片断电的时候FLASH被异...

到此,我们一方面请芯片设计人员做进一步确认,看看芯片是否真的坏了。同时,我们抱着怀疑一切的态度,请客...

发表于 2018-05-09 09:13 880次阅读
STM32F407V芯片断电的时候FLASH被异...

STM32如何通过 printf 打印出浮点数

这是由于 IAR 默认选择的 printf 库不支持浮点数的的输出。可在设置选项中修改。如下:默认使...

发表于 2018-05-07 16:47 125次阅读
STM32如何通过 printf 打印出浮点数

ST公司STM32F334x4/6/8系列MCU...

ST公司的stm32F334x4/6/8系列MCU是基于高性能ARM 32位CortexR-M4 R...

发表于 2018-05-05 14:07 225次阅读
ST公司STM32F334x4/6/8系列MCU...

STM32之 IP ICMP ETHERNET的...

嵌入式以太网开发是一个很有挑战性的工作。通过几个月的学习,个人觉得大致有两条途径。第一条途径,通过高...

发表于 2018-05-03 12:13 121次阅读
STM32之 IP ICMP ETHERNET的...

浅谈STM32的FSMC的TFT笔记

FSMC _Bank 用来选择外接存储器的地址,FSMC所控制的外存储器所映射的地址是0x6000 ...

发表于 2018-05-03 11:58 144次阅读
浅谈STM32的FSMC的TFT笔记

详解stm32的CAN控制器(程序分享)

首先简单介绍一下CAN总线,关于CAN总线是谁发明的,CAN总线的历史,CAN总线的发展,CAN总线...

发表于 2018-05-01 10:44 437次阅读
详解stm32的CAN控制器(程序分享)

基于STM32定时器的红外遥控数据接收设计原理

定时器就是按照一个特定的频率对计数值进行加一或减一操作,当数值溢出时则产生一个标志或中断。 定时器...

发表于 2018-04-30 17:52 258次阅读
基于STM32定时器的红外遥控数据接收设计原理

STM32开发板实验箱8位独立按键测试学习

1、畅学STM32核心板2、 配套STM32主芯片 F103C8T6STM32F103C8T6芯片基...

发表于 2018-04-30 15:21 672次阅读
STM32开发板实验箱8位独立按键测试学习

一文解析STM32内存管理和堆栈的认知与理解

本文主要介绍了STM32内存管理和堆栈的认知与理解,首先介绍的是内存管理的实现原理及分配、释放原理,...

发表于 2018-04-26 16:22 869次阅读
一文解析STM32内存管理和堆栈的认知与理解

关于stm32跑马灯的程序

stm32的寄存器比较多,难于记忆,所以官方封装了两套库函数。一个是标准库,不过在F7上官方没有更...

发表于 2018-04-26 11:08 423次阅读
关于stm32跑马灯的程序

STM32程序之MAX6675热电偶温度读取

用HAL很简单,CS拉低以后,一个SPI读两个字节进来,然后就是凑成12位,换算。 MAX6675...

发表于 2018-04-26 11:04 258次阅读
STM32程序之MAX6675热电偶温度读取

MDK将数据存储到FLASH指定地址

学习 STM32 也会遇到这样的 绝对定位 的问题如下: uint8_t UART_RX_BUF[1...

发表于 2018-04-26 11:02 147次阅读
MDK将数据存储到FLASH指定地址

STM32开发设计中FSMC可能遇到问题应对方案

为了使 HADDR 的字节地址信号线与存储器匹配,FSMC 的 25 条地址信号线FSMC_A[24...

发表于 2018-04-26 09:23 1428次阅读
STM32开发设计中FSMC可能遇到问题应对方案

STM32F4 C++ 封装库 之 EXTI

mbed 框架是为物联网设备开发的,工业控制级别的产品可以考虑用 RTE 框架。RTE 框架目前驱动...

发表于 2018-04-24 18:10 144次阅读
STM32F4 C++ 封装库 之 EXTI

STM32开发何使用STVP后就无法正常工作了

STM8家族中有些系列是支持最高 24MHz 主频的,比如 STM8S207、STM8AF52,等等...

发表于 2018-04-24 08:47 873次阅读
STM32开发何使用STVP后就无法正常工作了

FSMC如何读写CPLD

STM32 通过 FSMC 读写CPLD 的程序,CPLD挂在STM32的地址线和数据线上,将CPL...

发表于 2018-04-20 10:38 131次阅读
FSMC如何读写CPLD

stm32之.hex 文件

我们先来详细分析“方法一”的操作: 1.我们设置编译 程序的编译器(如图),这个设置意思是把程序下载...

发表于 2018-04-20 09:28 161次阅读
stm32之.hex 文件

STM32知识:什么是SYSTICK 作用是什么

什么是 SYSTICK : 这是一个24位的系统节拍定时器system tick timer,Sys...

发表于 2018-04-20 08:50 125次阅读
STM32知识:什么是SYSTICK 作用是什么

意法半导体:让云智能功能出现在物联网设备上

意法半导体的X-CUBE-AVS软件包让亚马逊的Alexa语音服务(AVS)能够运行在STM32* ...

发表于 2018-04-20 08:32 324次阅读
意法半导体:让云智能功能出现在物联网设备上

STM32之FSMC驱动LCD屏应用

FSMC其实就是把芯片内部的数据总线和地址总线引出来了,其实51单片机也是有这个总线外接的。没有说把...

发表于 2018-04-20 08:32 211次阅读
STM32之FSMC驱动LCD屏应用

STM32Note初识单片机(2)

在了解X86和ARM架构之前,我们先介绍下复杂指令集CISC(Complex Instuction ...

发表于 2018-04-19 13:43 98次阅读
STM32Note初识单片机(2)

带你一步步了解STM32启动代码

对于熟悉电脑的伙伴们来说,BIOS(那个蓝色的界面)可能不会太陌生吧,这货就是电脑的 启动代码 。没...

发表于 2018-04-19 13:40 1250次阅读
带你一步步了解STM32启动代码

STM32中GPIO的这八种配置种类你知道几种?

推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,...

发表于 2018-04-19 13:36 1507次阅读
STM32中GPIO的这八种配置种类你知道几种?

STM32接口中FSMC/FMC难点问题理解

FSMC,即灵活的静态存储控制器,能够与同步或异步存储器和 16 位 PC 存储器卡连接,STM32...

发表于 2018-04-19 12:36 835次阅读
STM32接口中FSMC/FMC难点问题理解

STM32如何实现W25X16的汉字字库存储

系统中使用过多的汉字会出现芯片容量不够用的问题,可将数据存储在 外部FLASH 中,在需要使用时进...

发表于 2018-04-17 12:38 293次阅读
STM32如何实现W25X16的汉字字库存储

使用STM32测量频率和占空比的几种方法

一般的高端示波器,测量频率即是这种方法。简而言之,高速采样一系列数据,然后通过频谱分析(例如快速傅里...

发表于 2018-04-16 16:19 983次阅读
使用STM32测量频率和占空比的几种方法

一文看懂STM32单片机和51单片机区别

单片微型计算机简称单片机,简单来说就是集CPU(运算、控制)、RAM(数据存储-内存)、ROM(程序...

发表于 2018-04-13 17:47 6906次阅读
一文看懂STM32单片机和51单片机区别

stm32与pic单片机比较_哪个好

本文首先介绍了stm32单片机的特性及优缺点,其次介绍了pic单片机的特点及不足,最后阐述了stm3...

发表于 2018-04-13 16:52 843次阅读
stm32与pic单片机比较_哪个好

STM32L496AGI6及P-L496G-CE...

ST公司的STM32L496AGI6是基于高性能Arm® Cortex®-M4 32-位RISC核的...

发表于 2018-04-12 05:07 203次阅读
STM32L496AGI6及P-L496G-CE...

成熟的设计还在用三极管是原因!

这周检查水泵变频器的电路,定稿用,发现数码管的控制三极管,基极竟然没有串联电阻,这会导致单片机的IO...

发表于 2018-04-11 17:21 1186次阅读
成熟的设计还在用三极管是原因!

STM32Note初识单片机

本连载将以STM32F103为例为学习嵌入式系统开发搭建一个基础知识框架。 初识单片机系列将会介绍单...

发表于 2018-04-08 10:00 128次阅读
STM32Note初识单片机

基于STM32芯片的一款智能台灯

随着现代科学技术的不断发展,生活用品的智能化程度也越来越普及,人们对一些家居物品的人性化、智能化设计...

发表于 2018-04-08 08:48 3300次阅读
基于STM32芯片的一款智能台灯

基于STM32的家庭服务机器人系统工作原理及设计

为解决当前大部分家庭服务机器人不具备行走功能或只具有简单的避障能力等问题,本文设计一种基于STM32...

发表于 2018-04-06 08:26 963次阅读
基于STM32的家庭服务机器人系统工作原理及设计

基于STM32的伺服压力机控制系统设计

伺服压力机的基本结构及对控制系统的要求与传统压力机比较,伺服压力机取消了原有压力机的飞轮和离合器,保...

发表于 2018-04-06 08:07 902次阅读
基于STM32的伺服压力机控制系统设计

STM32的串口中断配置

STM32的串口中断配置,也是很简单的. 首先是配置UART的GPIO口 首先是配置UART的GPI...

发表于 2018-04-06 07:24 632次阅读
STM32的串口中断配置

基于STM32单片机的DLP1700显示电路、光...

传统的数字微镜显示技术的信号输入端是由DVI接口提供图像信号和行场同步信号,由MSP430单片机对D...

发表于 2018-04-06 02:58 1056次阅读
基于STM32单片机的DLP1700显示电路、光...

Alexa语音服务软件扩展STM32Cube

X-CUBE-AVS扩展套件包含一组用于STM32F7系列微控制器的库和应用示例,充当支持Alexa...

发表于 2018-04-03 13:41 2858次阅读
Alexa语音服务软件扩展STM32Cube

STM32单片机--PWM输出

采用定时器2的通道2,使PA1输出频率1K,占空比40的PWM波形,用PA8随意延时取反led灯,指...

发表于 2018-04-03 08:54 737次阅读
STM32单片机--PWM输出

单片机STM32时钟图文理解

如输出到称为HCLK、FCLK的时钟,还直接输出到SDIO外设的SDIOCLK时钟、存储器控制器FS...

发表于 2018-04-03 08:45 893次阅读
单片机STM32时钟图文理解

RT-Thread Nano 3.0.3 的基本...

RT-Thread是一个高度可配置的嵌入式实时操作系统,配置文件是rtconfig.h。Nano就是...

发表于 2018-04-02 15:58 790次阅读
RT-Thread Nano 3.0.3 的基本...

STM32三种BOOT模式介绍

内置SRAM,既然是SRAM,自然也就没有程序存储的能力了,这个模式一般用于程序调试。假如我只修改了...

发表于 2018-03-30 16:09 1133次阅读
STM32三种BOOT模式介绍

STM32_IAP详解(有代码,有上位机)

 和app中分别放置两套中断向量表,当iap代码中将app烧写到flash中之后,跳转到app的中断...

发表于 2018-03-30 15:58 652次阅读
STM32_IAP详解(有代码,有上位机)

STM32内存管理以及STM32中的堆栈

这个是MDK编译之后能够得到的每个段的大小,也就能得到占用相应的FLASH和RAM的大小,但是还有两...

发表于 2018-03-29 13:45 789次阅读
STM32内存管理以及STM32中的堆栈

基于stm32的PWM输出呼吸灯(包括stm32...

本文主要介绍了基于stm32的pwm呼吸灯设计与实现。使用定时器来控制I/O口输出PWM波形,从而驱...

发表于 2018-03-28 16:23 1682次阅读
基于stm32的PWM输出呼吸灯(包括stm32...

STM32学习—如何选择各个电路部分的主要芯片

最小系统:考虑到小车的主控板可以作为今后做四轴或其他更高级的机器人的基础电路,所以主控选择了STM3...

发表于 2018-03-27 09:59 2221次阅读
STM32学习—如何选择各个电路部分的主要芯片

STM32片内FLASH被异常改写的问题分享

到此问题毫无进展,只好求助ST芯片设计人员做进一步确认,看看芯片是否真的坏了。同时,又请客户的硬件工...

发表于 2018-03-26 11:24 1145次阅读
STM32片内FLASH被异常改写的问题分享

STM32的存储器映射详解

存储器映射是指把芯片中或芯片外的FLASH,RAM,外设,BOOT,BLOCK等进行统一编址。

发表于 2018-03-23 15:24 676次阅读
STM32的存储器映射详解

IAR在STM32的配置方法

FWLib-用来存放所需固件库的头文件;2).StartUp-用来存放STM32的启动代码,添加co...

发表于 2018-03-20 15:52 867次阅读
IAR在STM32的配置方法

(纯干货)使用STM32测量频率和占空比的几种方...

本文详细介绍了使用STM32测量频率和占空比的几种方法。

发表于 2018-03-13 15:43 2083次阅读
(纯干货)使用STM32测量频率和占空比的几种方...

用STM32测量频率和占空比的几种方法

在内存复制过程中,面对大数据量的转移时利用DMA。所以,我们使用输入捕获事件触发DMA来搬运寄存器而...

发表于 2018-03-13 10:02 2185次阅读
用STM32测量频率和占空比的几种方法

stm32使用中出现的警告

发表于 2018-03-09 09:45 171次阅读
stm32使用中出现的警告

基于STM32的三轴数字罗盘HMC5883L模块...

最近买了个数字罗盘模块,调通后发现很不错,非常灵敏,测试的时候精度在1°以内。连续测量模式下,最快测...

发表于 2018-03-08 08:40 494次阅读
基于STM32的三轴数字罗盘HMC5883L模块...

意法半导体的新STM32让物联网设备快速连接云服...

意法半导体的新STM32探索套件简化移动网至云端连接,并提供免费试用的第三方服务,让物联网设备能够通...

发表于 2018-03-02 16:44 592次阅读
意法半导体的新STM32让物联网设备快速连接云服...

一文了解stm32使用DMA模块的相关操作

CPU最重要的工作室进行数据运算,从加减乘除到一些高级的运算,包括浮点、积分、微分、FFT等。CPU...

发表于 2018-02-27 11:18 3767次阅读
一文了解stm32使用DMA模块的相关操作