STM32个人总结
- 格式:doc
- 大小:90.00 KB
- 文档页数:4
基础入门编
1.搭建开发环境
详情看光盘资料,主要是软件安装和设置。
2.新建工程
可以直接用模板,了解每个文件的含义,会使用chm帮助。
3.STM32库
库的含义。
4.GPIO流水灯
认识RCC,GPIO的各种模式,寄存器的种类和作用。
5.POLLING按键
主要介绍了各种模式,实验通过不断读取GPIO的状态以达到判断按键的目的。
6.EXTI按键
使用了GPIO的EXTI中断来判断按键,记住EXTI要开AFIO(重映射也要开),另外SYSTICK不归NVIC管。
注意NVIC_IRQChannelSubPriority(),最多可以判断16种优先级,即16种中断,同一个中断入口的引脚引发的中断也算是同一种中断,同种种中断不能相互嵌套。
(响应优先级是在抢占优先级相同时,同时发生才有用,其中一个发生后无用)。
7.SYSTICK
关键是SYSTICK的初始化函数,了解那几个寄存器的作用和特殊的宏定义(就是选择自己想选择的位),根据配置可以延时不同的时间,详情看代码。
8.串口通信
开启相应RCC,做好Iint,配置好中断(可选,主要用于接收),然后弄好fputc(),可以直接用printf()直接输出。
9.DMA
不经CPU处理直接相互传输,开启相应的DMA,配置好from..to..,字节大小等,用cmd 命令后可以开启传输。
10.ADC(DMA)
主要就是初始化好ADC,什么通道模式之类的,详情看代码,由于使用了DMA模式,要配置好DMA,有ADC_DMACmd()开始传输。
11..FSMC显示英文
用FSMC直接写入液晶的控制芯片的显存,注意使用的是16位的颜色,线的接法要注意(RGB为5:6:5)。
由于用的是模拟的方法,输入数据时用的都是宏,该地址线用来作为C/D,16位是往前移了一位的,因此要乘以2.
值得注意的是开窗的显示手法,在显示字符前先“开”一个窗,当一行数据写完时,自动换到下一行继续写。
在写数据的函数那里可以更换字的背景色,也可以修改该函数的.h的BACKGROUND 的宏定义。
FSMC的初始化暂时不清楚,应该是关于NOR FLASH的。
控制代码是配好的,具体的设置看参考文档(有关定位坐标和扫描方式都与此有关)。
(NOR-FLASH 有4个bank,NE[3:0],区分不同的bank,实验用NE1;DataAddress_Mux 数据域地址线复用;8位地址线25:0->24:0 16位地址线25:1->24:0,宏定义是16位的地址线,对应的机内地址*2左移1位)
12.IIC-EEPROM
就是按照IIC协议实现数据的传输,不过大部分都可以交给硬件来完成,注意每次发送数据后要用特殊的检测函数(函数的具体定义可在零死角中看到)。
关于buffer_write(),函数中用了一系列判断数据大小的方法,搞清楚每个变量的含义就行。
此外可以连续写。
觉得buffer_write有问题。
13.SPI-FLASH
有4条总线,注意CPOL(时钟极性),0时空闲态为0,否则为1;CPHA(时钟相位),等于0时在时钟奇数边缘采样,1时在偶数边缘采样(第一个边缘依据CPOL来决定)。
基础的配置都是按照一个命令表来来实现的,具体看代码或资料。
14.定时器
TIM6.7是基本定时器,TIM2-5是通用定时器(pwm,捕获),TIM1.8是高级定时器(通用+死区)。
代码中有用定时器实现定时的,可以参考。
关于PWM和时钟的来源可以参考资料,写得比较全面。
15.呼吸灯
运用TIM3的PWM输出+中断实现,该数据是经由计算而来的,每一次溢满就进入中断修改CCR改变PWM宽度。
16.RTC实时时钟
就是用到了里面的一个时钟计数器之类的东西,记录UNIX时间戳(要转化为东8区),又分断电复位和按键复位。
通过串口输入时间,再计算出其他的东西。
有秒、闹钟、溢出中断,实验用了秒中断。
使用了外部晶振,同步时要延时。
其他的都是计算函数,具体看代码。
17.电源管理
有睡眠、停止、待机模式,具体实现看视频和代码。
18.CAN通信
略复杂,以后补充。
提高篇
19.SDIO-SD卡
. 使用SDIO外设驱动SD卡,上电,初始化,选择RAC。
在初始化sd卡那个函数中有英文描述(重要)。
每次写完或读完后要用SD_WaitWriteOperation()和SD_GetStatus(),其中的SD_WaitWriteOperation()是用来等待DMA 把缓冲的数据传输到SDIO 的FIFO 的而SD_GetStatus()是用来等待卡与SDIO 之间传输数据完毕的。
;
在write代码的最后调用了SDIO_ITConfig(),SDIO 的数据传输结束中断就是这个时候开启的(注意里面用到了中断,在main函数中调用NVIC_Configuration()),数据传输结束时,就进入到stm32f10x_it.c 文件中的中断服务函数SDIO_IRQHandler()中处理了,中断服务函数主要就是负责清中断。
20.FATFS文件系统
沿用了19讲的SD_Init(),此函数在diskio.c中的disk_initialize()被调用,其他的函数应该放的东西在参考网页的Disk I/O Interface中可以查看得到。
使用时,在19讲的基础上(有中断),加上文件系统的文件,另外自己构建diskio()函数。
大概使用方式是mount-open-write/read-close,每次写完要close才会保存。
不使用时要用mount取消工作区。
21.FSMC显示汉字/图片
汉字显示:
汉字的大小是16x16,在.h中可修改。
GetGBKCode_from_sd()函数从SD的BIN文件中读取字模,将机内码转化为区位码再转成文件中的位置。
(机内码-0xA0=区位码),一个区有94个位。
pos = ((High8bit-0xa0-16)*94+Low8bit-0xa0-1)*2*16;中2*16代表字模占2*16个字节,指针要偏移32字节/字。
f_lseek()中的指针以Byte为单位。
拿出32个int8大小的数据后,合成一个16位的数,然后…..注意区分字模和机内码的大小。
图片显示:
主要显示BMP图,前54B是图片信息。
扫描方式是从下到上,从左到右。
为了方便放入Cach,取了4的倍数,大小=54+(width*3+?)*height,括号内的是4的倍数。
程序中用了WIDTHBYTES(bits) (((bits)+31)/32*4) ;来补充bit数,求出byte大小,一个像素有3byte,不能大于width*3;
在读取SD卡时,分成两半读,一次读完数据有问题,原因未知,分两次读。
用RGB24TORGB16(R,G,B) ((unsigned short int)((((R)>>3)<<11) | (((G)>>2)<<5) | ((B)>>3))),对图片进行压缩。
8:8:8->5:6:3;
扫描方向:(X-Y方向不变)
原来的为1100为正常,若为0100-MX,,则Y的方向取反,从左往右,从下往上;取第3位为MV,为横屏,0010为从下往上,右往左(先扫Y,再扫X);调用代码看更直观。
液晶截图:
读出来的格式是RGB,写入的格式是BGR。
主要是格式的转换。
触摸屏:
可以选择把触摸屏的系数存储在FLASH中,具体实现可以看代码。
主要的难点是触摸屏控制器的取样和数值计算,系数得出后就可以直接用函数求出液晶上点的位置。
在Carlibration中通过检测与计算得出系数ABCD,存储在全局变量cal_p[]中。
Read_2046得到采样电压的平均值。
有两个read_2046,一个比较精准,一个比较快。
画板的背景在描点函数中可以调整。
B-stroage。