历史上的今天
返回首页

历史上的今天

今天是:2025年01月06日(星期一)

正在发生

2020年01月06日 | stm32 hal库不定长接收数据

2020-01-06 来源:eefocus

使用 IDLE 中断接收,稍微修改了hal库,但是都是在begin end中修改,重新在cube中生成代码不会去掉这部分内容,不见原理,原理部分请参考编程手册,只讲做法。


1.在stm32f4xx_it,c中修改


void USART1_IRQHandler(void)

{

  /* USER CODE BEGIN USART1_IRQn 0 */

  uint32_t isrflags   = READ_REG(huart1.Instance->SR);

  uint32_t cr1its     = READ_REG(huart1.Instance->CR1);

if(((isrflags & USART_SR_IDLE) != RESET) && ((cr1its & USART_CR1_IDLEIE))) 

{

HAL_UART_IDLECallback(&huart1);

__HAL_UART_CLEAR_IDLEFLAG(&huart1);

huart1.RxState = HAL_UART_STATE_READY;

}  


  /* USER CODE END USART1_IRQn 0 */

  HAL_UART_IRQHandler(&huart1);

  /* USER CODE BEGIN USART1_IRQn 1 */


  /* USER CODE END USART1_IRQn 1 */

}


2.在生成的uart.c文件加入,并且在.h中声明


__weak void HAL_UART_IDLECallback(UART_HandleTypeDef *huart)

{

(void)huart;

}


3.在应用程序中使能IDLE中断


void task1_Fxn(void *p)

{

__HAL_UART_ENABLE_IT(&huart1,UART_IT_IDLE);

status = HAL_UART_Receive_DMA(&huart1,uart_buffer,100);

while(1)

{

HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_0);

vTaskSuspend(NULL);

//在这里添加接收到串口数据的处理

HAL_UART_AbortReceive(&huart1);

HAL_UART_Receive_DMA(&huart1,uart_buffer,100);

}

}


4.IDLE回调函数


void HAL_UART_IDLECallback(UART_HandleTypeDef *huart)

{

xTaskResumeFromISR(task1Handle);

}


推荐阅读

史海拾趣

Big-Sun Electronics Co Ltd公司的发展小趣事

品质是Big-Sun Electronics Co Ltd公司一直以来的核心竞争力。公司建立了严格的质量管理体系,从原材料采购到生产流程控制,再到产品出厂检验,每一个环节都严格把关。同时,Big-Sun还注重品牌建设,通过广告宣传和客户服务,不断提升品牌知名度和美誉度。

CLARE公司的发展小趣事

CLARE公司始终坚持品质至上的原则,从原材料采购到生产制造、质量检测等各个环节都严格把控,确保产品的品质和性能达到客户的期望。同时,公司还建立了完善的售后服务体系,为客户提供及时、专业的技术支持和服务。这些举措赢得了客户的信赖和好评,为CLARE公司的长期发展奠定了坚实的基础。

GWP Group公司的发展小趣事

CLARE公司始终坚持品质至上的原则,从原材料采购到生产制造、质量检测等各个环节都严格把控,确保产品的品质和性能达到客户的期望。同时,公司还建立了完善的售后服务体系,为客户提供及时、专业的技术支持和服务。这些举措赢得了客户的信赖和好评,为CLARE公司的长期发展奠定了坚实的基础。

安普康(AMPCOM)公司的发展小趣事

随着业务的不断发展,安普康开始积极寻求市场拓展和战略合作的机会。公司在香港市场取得了显著的成绩后,决定进一步拓展内地市场。通过设立深圳安普康科技有限公司等分支机构,安普康逐步在内地市场建立了完善的销售网络和服务体系。同时,公司还与多家知名企业建立了长期合作关系,共同开拓市场、分享资源。这些合作不仅提升了安普康的市场地位,也为其未来的发展奠定了坚实的基础。

FINECHIPS公司的发展小趣事

FINECHIPS公司自成立以来,始终将技术创新视为企业发展的核心驱动力。公司投入大量资源于研发部门,专注于集成电路(IC)和电子元器件的技术创新。在某一关键时期,FINECHIPS成功研发出一款高性能、低功耗的模拟开关芯片,该芯片凭借其卓越的性能迅速获得市场认可,不仅在国内市场占据一席之地,还成功打入国际市场,为公司带来了显著的品牌影响力和市场份额增长。

ECLIPTEK公司的发展小趣事

ECLIPTEK公司自创立之初就专注于高精度电子元件的研发与生产。面对激烈的市场竞争,公司不断投入研发资源,推出了一系列具有创新性的产品,如高精度时间同步模块和低功耗传感器。这些产品凭借其卓越的性能和可靠性,迅速在市场上赢得了良好的口碑,使ECLIPTEK成为电子元件行业的佼佼者。

问答坊 | AI 解惑

关于监控用的摄像头用的LED是什么样的?

遥控器用的红外LED,因为红外LED发出的光不完全是红外光,也包含部分的可见光(红色)成分,所以肉眼能看到少许光。遥控器使用的LED,一般发射角度是30度左右,用户即使没有完全对准目标,也能有效操作。在没有外界红外线干扰的时候,遥控距离可以 ...…

查看全部问答>

AVR 单片机指令指令

最全的AVR 单片机指令指令…

查看全部问答>

几十种AD/DA装换芯片资料

如题[local]1[/local] [ 本帖最后由 美目如初 于 2009-8-31 23:24 编辑 ]…

查看全部问答>

wince安全性问题

在wince 6.0中我有一个客户端程序,先后两次调用InitializeSecurityContext用于和google服务器端进行安全认证,第一次调用返回的是SEC_I_CONTINUE_NEEDED,第二次返回的是SEC_E_WRONG_PRINCIPAL,请问怎么解决啊?是不是和证书有关系?相同程序在wi ...…

查看全部问答>

PB的编译问题

新装的WIN XP SP2, 番茄花园, 然后装PB5.0, 先装.net framework 1.1, 然后装PB5.0(CPU选择了ARMV4I, X86, Emulator). PB5.0 装好之后,就新建工程编译了,这时EVC, VS2005等都还没有装. 用自带的2410BSP新建工程编译的时候出现错误: \"Invalid  ...…

查看全部问答>

出售代购各种电子元件,欢迎各位来捧场

各位有需要电子元件的请和我联系,库存商品优惠啦!:D 小店欢迎您的光临 石家庄傲尔科技有限公司是一家专注于国外中小电子工程分包商,经过多年的发展,我公司与国际大的元件供应商如MOUSER, DIGIKEY建立了稳定的合作。 我们的优势:1. 保证 ...…

查看全部问答>

讲了那么多技术,有没有导购的?

                                 要1K STM32f103c8T6,找谁?…

查看全部问答>

串口初始化影响步进电机工作?

void main(){      init_serialcom();   //步进电机不能有这个函数,这是一个初始化串口的函数,  ATE0();    //步进电机也不能有这个函数,这是个向串口发送AT指令的函数。    为什么去掉这前两个函 ...…

查看全部问答>

u8 sd_raw_get_info(struct sd_raw_info* info)中struct怎么理解

u8 sd_raw_get_info(struct sd_raw_info* info) { …… } 这个子程序怎么用啊,像u8 mmcWrite(u32 sector, u8* buffer)这种,我在主程序中只要定义unsigned char SD_Write1[]={\"0123456789\"}; 就可以用了mmcWrite(SD_Write1); 但是这个定义 ...…

查看全部问答>

MSP430AFE253的SD24使用问题

SD24的SD24CCTLx寄存器 SD24GRP 位  SD24_A group. Groups SD24_A channel with next higher channel. Not used for the last channel. 如何使用该位?…

查看全部问答>