历史上的今天
返回首页

历史上的今天

今天是:2024年08月26日(星期一)

正在发生

2021年08月26日 | STM32 DMA 自我学习 简单总结

2021-08-26 来源:eefocus

简单记录一下STM32的DMA的配置说明--------


根据野火的串口的DMA程序,自己简单理解说明-----


----第一部分----DMA配置-----


void USART1_DMA_Config(void)

{

DMA_InitTypeDef DMA_InitStructure;


RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);  //时钟


DMA_InitStructure.DMA_PeripheralBaseAddr = USART1_DR_Base;    //设置DMA源:串口数据寄存器地址----基地址----如果后面打开了地址自增---则会传输连续一组数据  

DMA_InitStructure.DMA_MemoryBaseAddr = (u32)SendBuff;   //内存地址(要传输的变量的指针)---也就是DMA传输的源地址

DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;  //方向:外设是目的地----如果是--DMA_DIR_PeripheralSRC---则是外设作为数据传输的来源

DMA_InitStructure.DMA_BufferSize = SENDBUFF_SIZE;  //DMA要传输的总数据大小   

DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;  //外设地址不增---外设地址不自增---表示从一个固定地址传输或者接收数据----反之则为一个递增地址

DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;  //内存地址自增---内存地址不自增---也表示从一个固定地址传输或者接收数据----反之则为一个递增地址

DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; //外设数据单位---分别有8位---字---DMA_PeripheralDataSize_Byte。半字---DMA_PeripheralDataSize_HalfWord。字----DMA_PeripheralDataSize_Word---

DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;  //内存数据单位 8bit---分别有8位---字---DMA_MemoryDataSize_Byte。半字---DMA_MemoryDataSize_HalfWord。字----DMA_MemoryDataSize_Word--- 

DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;   //DMA模式:不断循环 ----另一种模式--循环---DMA_Mode_Normal

DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;    //优先级:中-----分别有----最高优先级---DMA_Priority_VeryHigh。高优先级---DMA_Priority_High。中优先级---DMA_Priority_Medium。低优先级---DMA_Priority_Low。

DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;   //禁止内存到内存的传输   


DMA_Init(DMA1_Channel4, &DMA_InitStructure);  //配置DMA1的4通道---对应USART1_TX。还有很多相应已经确定好的通道----见下面截图----截图01    

DMA_Cmd (DMA1_Channel4,ENABLE);  //使能DMA


 //DMA_ITConfig(DMA1_Channel4,DMA_IT_TC,ENABLE);  //配置DMA发送完成后产生中断----这个是根据需要来确定是否需要中断---比如你需要确定DMA什么时候完成传输----传输完成后你需要做一些什么的时候。但是如果配置了使用完成中断,则需要在后面配置其作为中断的优先级。

}


---第二部分---如果前面打开了DMA中断,这里需要配置其中断优先级----


static void NVIC_Configuration(void)

{

  NVIC_InitTypeDef NVIC_InitStructure;

  

  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

  

  NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel4_IRQn;  //主要是这里的对应DMA通道

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

  NVIC_Init(&NVIC_InitStructure);

}

---第三部分---如果前面打开了DMA中断,这里需要设置其中断函数----

void DMA1_Channel4_IRQHandler(void)


{


  if(DMA_GetFlagStatus(DMA1_FLAG_TC4)==SET)  //DMA发送完成标志----其它标志位见截图02---和截图03--


  {


    ..............


    DMA_ClearFlag(DMA1_FLAG_TC4);  //清除发送完成标志---以便下次判断


  }


}


----------------------------------------截图------------------------------


--------------截图01---------------

----------------------截图02-------------------------

--------------------------------截图03-----------------------

推荐阅读

史海拾趣

Glow-Lite Corp公司的发展小趣事

对于红外遥控发射电路,网友可能会有多方面的问题。以下是一些可能的问题及其详细回答:

一、红外遥控发射电路的基本工作原理是什么?

回答
红外遥控发射电路的基本工作原理是,当用户按下遥控器上的某个按键时,遥控器内部的微控制器(CPU)会读取与该按键对应的二进制数据,并通过信号调理电路进行处理。随后,这些数据被调制电路转换为适合传输的信号,并经过放大后,由红外线发射二极管以红外光的形式发射出去。接收设备上的红外接收头接收到这些红外光信号后,会将其转换为电信号,并经过进一步的处理还原为原始的控制指令,从而实现遥控功能。

二、红外遥控发射电路常见的故障有哪些?

回答
红外遥控发射电路常见的故障主要包括以下几个方面:

  1. 电池电量不足或接触不良:这是最常见的故障之一,当电池电量不足或电池卡簧接触不良时,会导致遥控器无法正常工作。

  2. 按键故障:按键上的导电橡胶易磨损、老化,或按键电路中的铜箔线条断裂、开焊等,都会导致按键失灵。

  3. 振荡电路故障:振荡电路中的陶瓷谐振器易受到机械冲击而损坏,导致振荡频率偏移或停振,进而影响遥控信号的发射。

  4. 红外发光二极管故障:红外发光二极管可能因引脚开焊、内部开路或失效等原因而无法正常工作。

  5. 驱动电路故障:驱动电路中的晶体三极管、电阻等元件可能因开路、放大系数下降等原因导致故障。

  6. 编码集成电路故障:编码集成电路是整个遥控器的核心部分,其内部集成了多个复杂的电路。如果编码集成电路发生故障,将直接影响遥控信号的生成和发射。

三、如何判断红外遥控发射电路是否故障?

回答
判断红外遥控发射电路是否故障,可以采用以下几种方法:

  1. 观察指示灯:如果遥控器上有指示灯,可以通过观察指示灯是否闪亮来判断遥控器是否有红外信号发射。

  2. 替换法:用一个确认无故障的遥控器去控制同一台设备,如果控制有效,则说明原遥控器可能存在故障。

  3. 万用表检测:使用万用表测量遥控器电池电压、按键电阻、红外发光二极管两端电压等,以判断电路是否正常。

  4. 收音机检测:利用收音机的中频载波与遥控器振荡频率接近的特点,通过收音机接收遥控器发出的信号来判断遥控器是否具有发射能力。

四、如何维修红外遥控发射电路的故障?

回答
维修红外遥控发射电路的故障,需要根据具体的故障原因采取相应的措施。以下是一些常见的维修方法:

  1. 更换电池:如果电池电量不足或接触不良,应更换新电池或清理电池卡簧。

  2. 清洁按键:如果按键故障是由于导电橡胶磨损或灰尘等杂物造成的,可以用软布蘸无水酒精清洗按键表面。

  3. 更换元件:如果振荡电路、红外发光二极管、驱动电路或编码集成电路等元件损坏,应更换相应的元件。

  4. 焊接修复:如果电路中存在开焊、断裂等现象,应使用焊接工具进行修复。

  5. 调整电路:如果故障是由于电路参数设置不当或元件老化等原因造成的,应对电路进行调整或更换老化元件。

通过以上方法,可以有效地解决红外遥控发射电路中的常见故障。

AEM [ American Electronic Materials]公司的发展小趣事

AEM深知人才是企业发展的核心竞争力。因此,公司一直注重人才培养和团队建设。AEM建立了完善的人才培养和激励机制,吸引和培养了一批高素质、专业化的员工队伍。同时,公司还为员工提供了良好的工作环境和发展空间,鼓励员工不断创新和进取。

在团队建设方面,AEM注重团队合作和沟通协作能力的培养。通过定期的团队建设活动和内部培训,AEM打造了一支团结、高效、富有战斗力的团队,为公司的持续发展提供了有力保障。

这五个故事从不同角度展示了AEM公司在电子行业中的发展历程和取得的成就。通过不断创新、合作与拓展,AEM已经成为电子行业中具有重要影响力的企业之一。未来,随着技术的不断进步和市场的不断变化,AEM将继续保持其领先地位,为电子行业的发展贡献更多力量。

High Voltage Power Solutions Inc公司的发展小趣事

随着全球经济的不断发展,AEM意识到要想在激烈的竞争中保持领先地位,必须进一步拓展全球市场。于是,公司开始实施全球扩张战略,积极开拓新的市场和业务领域。

在这个过程中,AEM与多家国际知名企业建立了战略合作关系。通过合作,AEM成功进入了欧洲、亚洲等多个重要市场,进一步提升了公司的品牌影响力和市场份额。同时,这些合作也为AEM带来了更多的技术资源和市场机会,促进了公司的持续发展。

Cal Crystal Lab Inc / Comclok Inc公司的发展小趣事

Comclok Inc创立之初,便专注于高精度时钟芯片的研发与生产。在电子设备的智能化和精准化趋势日益明显的背景下,高精度时钟芯片成为了市场的热门需求。Comclok Inc凭借出色的技术实力和敏锐的市场洞察力,成功开发出一系列性能卓越的时钟芯片,并迅速占领市场份额。公司不仅在国内市场取得了成功,还积极拓展海外市场,与多家国际知名企业建立了长期合作关系。

Dymec公司的发展小趣事

在国内市场取得一定成绩后,Dymec公司开始寻求更广阔的发展空间。公司决定进军国际市场,通过参加国际展会、建立海外销售渠道等方式,逐步打开了国际市场的大门。在拓展国际市场的过程中,Dymec公司不仅提升了品牌影响力,还积累了丰富的国际业务经验。

风华邦科(FH-BK)公司的发展小趣事

在电子科技领域,FlyWin集团不断投入研发资源,致力于新技术的开发与应用。公司成立了专门的研发团队,专注于人工智能、物联网等前沿技术的探索。通过不断的技术创新,FlyWin成功推出了一系列具有自主知识产权的电子产品,如智能传感器、物联网解决方案等。这些产品不仅提升了公司的市场竞争力,也为公司的长远发展提供了强大的技术支撑。

问答坊 | AI 解惑

模拟电路

我模拟电路学的不 怎么样 。 幸好有电子工程论坛啊…

查看全部问答>

TI2000系列DSP开发应用

TI2000系列DSP开发应用,课件。…

查看全部问答>

运动与健康市场的人体传感器网络PAN

本帖最后由 jameswangsynnex 于 2015-3-3 19:57 编辑 近年来,随着各种短距离无线通信技术的发展,人们提出了一个新的概念,即个人局域网PAN(Personal Area Network)。      PAN 核心思想是,用无线电或红外线或者蓝牙代替传统的有线电缆 ...…

查看全部问答>

超正的红外解码资料 不看就走宝咯

本帖最后由 paulhyde 于 2014-9-15 09:24 编辑 喜欢就顶下吧  …

查看全部问答>

DS18B20

问下 就是DS18B20负温度如何弄 ,我做来总是有1度的误差…

查看全部问答>

《小强爬行记》全套漫画:道尽毕业生辛酸

近日,天涯社区一名广州的网友“卖身找工作”,自称是仍然失业的应届毕业生,他结合眼下“被就业”“跨省追捕”等时兴话题及自 身的经历,以漫画“小强爬行记”道尽自己大学毕业以来就业路上的种种辛酸经历。他调侃自己为一只“踩不死的小强,就算 ...…

查看全部问答>

奇特的发光引路带子

  你有没有当夜猫子的习惯,有没有半夜起床翻冰箱,找水喝的“恶习”。但是又不想开电打扰家人或者麻烦去开电,那就让发光带子给你引路吧...把这些带子贴在你晚上频繁经过的地方,沙发角、茶几角、阶梯、门把手,白天你几乎看不到这些带子 ...…

查看全部问答>

FIR滤波器的问题

写了一个FIR滤波器的程序。要求大约是200Hz采样速率,16阶,17抽头。算出来延迟是40毫秒。并且算好了滤波系数。 可能是我对“延迟”的理解有问题,代码写成滤波函数定时每40毫秒运行一次,取当时最近的一次采样结果进行滤波。运行的结果当然是惨不 ...…

查看全部问答>

100分请教高手Trace32如何加载符号

在cmm文件中设置如下: &UBOOT_EXECUTED_ADDRESS=0x33e00000 &UBOOT_PATH=\"Y:\\svn\\uboot_tao\\uboot-1.3.4-m9\" &UBOOT_IMAGE=\"&UBOOT_PATH\\u-boot\" &UBOOT_CODE=\"&UBOOT_PATH\\\" print \"u-boot loading again for Debugging\" Data ...…

查看全部问答>

ShellExecuteEx 打开bat文件一闪

= _T(\"searchlist.bat\");          //执行DOS命令                                TCHAR szAppPath[MAX_PATH] = _T(\"\");& ...…

查看全部问答>