STM32暂时学习记录

本文概述了DMA(直接存储器访问)在提高CPU效率中的作用,介绍了STM32的DMA控制器,RTC时钟的配置与使用,包括RTC闹钟功能。此外,还涉及了SD卡的SPI驱动、FATFS文件系统、BMP图片显示、音乐播放和UCOSIII操作系统移植,以及智能楼宇项目的通信技术。
摘要由CSDN通过智能技术生成

因为内容多,所以博客更新的较慢,记录下慢慢更新

一、DMA

简单来说就是:直接存储器访问

DMA 传输方式无需 CPU 直接控制传输,也没有中断处理方式那样保留现场和恢复现场的过程,通过硬件为 RAM 与 I/O 设备开辟一条直接传送数据的通路, 能使 CPU 的效率大为提高。

STM32 最多有 2 个 DMA 控制器( DMA2 仅存在大容量产品中),12个独立的可配置的通道(请求), DMA1 有 7 个通道。DMA2 有 5 个通道。每个通道专门用来管理来自于一个或多个外设对存储器访问的请求。还有一个仲裁器来协调各个 DMA 请求的优先权。

***********************

F4的DMA多一个数据流,其他类型的单片机看手册就行,无数据流

 例如: DMA1

DMA有三个方向内存到内存    内存到外设   外设到内存

 二、RTC时钟

RTC(Real Time Clock)实时时钟,它是一个独立的定时器。RTC模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。

  • RTCCLK通常选择低功耗32.768kHz外部晶振(LSE)
  • RTC预分频器通常设置为32768,LES时钟经过RTC预分频器,输入频率变为1Hz,也就是1秒
  • RTC_CNT输入时钟为1Hz时,1s加1次
  • RTC_ALR是用来做闹钟的,RTC_CNT的值会与RTC_ALR的值进行比较,二者相等时,会产生闹钟中断

RTC配置步骤

  • 使能电源时钟和后备域时钟,开启RTC后备寄存器写访问
  • 复位备份区域,开启外部低速振荡器(LSE)
  • 选择RTC时钟,并使能
  • 设置RTC的分频系数,配置RTC时钟
  • 更新配置,设置RTC中断分组
  • 编写RTC中断服务函数 

 三、SD卡

1、SPI方式驱动SD卡

移植这两个文件,如果SPI没初始化需要初始化引脚,然后拉高片选CS

例如:相关的操作函数

2、FATFS

FATFS 是一个通用的文件系统(FAT/exFAT)模块,用于在小型嵌入式系统中实现FAT文件系统。 FatFs 组件的编写遵循ANSI C(C89),完全分离于磁盘 I/O 层,因此不依赖于硬件平台。它可以嵌入到资源有限的微控制器中,如 8051, PIC, AVR, ARM, Z80, RX等等,不需要做任何修改。

移植文件操作系统

SD卡文件操作步骤:
挂载文件系统——打开文件——读写操作——关闭文件——取消挂载
f_mount() —— f_open() —— f_read()/f_write() —— f_close() ——f_mount(NULL)

3、BMP图片显示 

😌图片目录处理

😈用链表来存储路径,方便对内存的优化,可自由读取图片的数量,做电子相册

4、音乐播放 

同样的方法进行链表的存储路径,然后读取音频文件进行播放

音乐播放的同时,对应的图片进行显示,通过文件名来进行搜索

/************************************************************
 * 函数名称:Show_Wav_Play
 * 函数说明:读取SD卡中指定的一首歌
 * 形    参:num  第几首歌
 * 返 回 值:无
 * 备    注:链表获取的路径--随着音乐播放显示相应的图片
*************************************************************/
void Show_Wav_Play(u8 num)
{
	LinkList *p=Wav_head;//视频的头指针
	LNode *p2=heade;//图片的头指针
	char buff[50]={0},*q,*t;//定义临时数组和指针来存放
	while(p->next)
	{
		p=p->next;//跳过头
		if(p->num==num)
		{
			
			strcpy(buff,p->name);//将文件的路径存到临时数组中
			t=strtok(buff,".");//分隔路径名
			//printf("t=%s\r\n",t);
			t=strtok(t,"/");//分隔
			while(t)
			{
				q = t;//拿到图片的名字
				t=strtok(NULL,"/");
				//printf("t=%s\r\n",t);
			}
			//printf("q=%s\r\n",q);
			while(p2->next)//遍历视频的名字路径
			{
				p2=p2->next;
				if(strstr(p2->name,q))//查找名称
				{
					bmp_decode(p2->name);//显示图片
				}			
			}
			printf("%s  第%d首歌\r\n",p->name,p->num);
			WAV_Play((u8*)p->name);//播放视频
		}
		
	}
	
}

进度条--用定时器来实现--标志位进行读取

暂停播放和继续播放在外部中断里实现,还有音量调节,语音控制同理

 四、UCOSIII操作系统

1、UCSIII简介

UCSIII 是一个可以基于 ROM 运行的、可裁减的、抢占式、实时多任务内核,具有高度可移植性,特别适合于微处理器和控制器,是和很多商业操作系统性能相当的实时操作系统(RTOS)。

2、UCOSII移植

任务创建

其他任务函数创建 另外的文件进行存放会更好

3、UCOSIII应用

  1. 任务创建
  2. 任务管理
  3. 消息队列
  4. 信号量
  5. 互斥信号量
  6. 消息队列
  7. 事件标志位
  8. 软件定时器
  9. 内存管理
  10. 中断管理

五、智能楼宇的项目

  1. 485通讯
  2. modbus
  3. LCD-8080
  4. LCD-FSMC
  5. 触摸屏
  6. LVGL
  7. GUI

 六、三级管、MOS管

三极管,,NPN型,箭头往外,B基极给高电平,C集电极和E发射极导通,,PNP型,箭头往里,B极给低电平,C和E导通。

MOS管,,,两线相交是S极,单独引线是D极,,NMOS箭头指向G极,,PMOS箭头指向外面,,寄生二极管,N沟道,S极指向D极,P沟道则相反,,,总的来说要么都S指向D,要么都D指向S,, 

 N MOS,S极接输出,D极接输入,,PMOS则相反、电流导通方向跟寄生二极管方向相反,NMOS导通条件,G极电压大于S极电压,反之,,PMOS相反,、G极和N极电压相等时,截止

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值