Stm32简要说明 一个外设,只有设置好之后才让它工作,故在stm32中操作外设时,配置完成之后,都有一个使能。Stm32中,调用库函数对外设初始化时,传递的参数有一个结构体型指针,注意定义变量时先定义为普通变量,然后把此地址传递过去(也可定义为指针,但要先给指针自己个地址,否则为野指针,此类错误较隐蔽,特别注意指针)。
Stm32首先是开启相应的外设时钟,再者是用到哪一个端口,就配置相应端口的功能。之后开始思考如何与外设通信,通信道路建立完成之后,就先完成外设的初始化。之后就可编写相应的应用程序,完成相应的功能。
硬件i2c与软件i2c基本上是同一个意思,硬件时也要按照通信的步骤,一步步设置寄存器,产生相应的功能。方便之处是如接收数据,到相应的寄存器读取即可。(其实感觉硬件不方便啊,自己理解:硬件i2c可以用dma方式,也可以每个处理完成之后产生一个事件,然后产生中断(观察硬件连接,要产生随机中断,硬件必须满足,例
再继续处理,更充分利用cpu)(硬件好像是为你提供了多种选择的一个框架,根据数据手册设置即可。会设置也就能写出软件模拟的了)(还有标志位,可随时查看状态。)
Stm32分配给外设的有一段空间,这个空间的起始地址就是外设基地址,而不同的外设挂载在不同的总线上,故每个总线也有个起始地址,叫总线基地址。
配置一个模式只需要4位,为什么此处有8位
相当于有的位是标示位,是输入还是输出。
液晶 对于此液晶显示,因为不含字库,故需添加字库,例英文字库,先用字模软件生成ascll码字库。(其实对于液晶显示就是判断每一位,是1则该像素亮,否则灭),液晶显示的一个重要函数是生成窗口函数(液晶显示基本是显示完一行后就会自动换行,开始下一行的显示,而窗口函数也相当于规定显示的起始点,与一行的结束点,也即在哪开始,在哪换行)(液晶各点位置使用坐标表示的,要操作某点,先要知道坐标,在利用开窗函数,再显示)(对于触屏,也即利用一定的换算关系,确定接触点的坐标,再产生相应的动作。)
我们在编写程序显示某一个字符,例‘A’,可直接写’A‘(可能编译软件中含有字模,实际编译时会解析为对应的ascll码(一个16进制数,规定其就代表对应的字符,实际解析的是ascll,因为字模中的字符是按一定规律排列的,故根据其ascll码可找到对应的字模,然后提取,进行显示。也可在字库的每个字模的开头写上对应的字符,然后先判断ascll码值是否相同,若相同则提取,进行显示)(对于汉字,因较多,用的两个字节表示的)。
自制字库显示方法:
[cpp] view plain copy
- #include <stdio.h>
- #define STR_WIDTH 6 /* 字符宽度 */
- #define STR_HEIGHT 12 /* 字符高度 */
- /*
- * 常用ASCII表,偏移量32,大小:12(高度)*6 (宽度)
- */
- const unsigned char asc2_1206[95][12]={
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"",0*/
- {0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x04,0x00,0x00},/*"!",1*/
- ..........................................
- char i = 1; /*! */
- int main()
- {
- chartemp = 0, page = 0, column = 0;
- for(page=0; page < STR_HEIGHT; page++ )
- {
- temp= asc2_1206[page];
- for(column=0; column < STR_WIDTH; column++ )
- {
- if(temp & 0x01 )
- {
- printf(" * " );
- }
- else
- {
- printf(" . " );
- }
- temp>>= 1;
- }
- printf("\n" ); /* 写完一行 */
- }
- printf("\n" ); /* 全部写完 */
- }
显示为:
注意此处生成的字库相当于和平常思维相反,此开头为低位。
此处制作的字库,12*6,即高度为12,宽度为6。显示即可先开一个12*6的窗口,提取一个数据,判断各位是0还是1,是1则显示,是0,则不显示。因为宽度为6,所以只需6位即可表示,而一个字节8位,头两位不用为0.(其实为什么这样,可以想一下是如何制作字模的,如上图,把液晶想象为一块方板,上面有一排排的点,可以发光,因为宽度为6.所以一行我只需6个点,高度为12,所以需要12行,有6个点,可以用8位,也即一个字节表示一行中哪个点亮(多出的两个位用0表示,判断时可忽略),故判断6位即可。所以有12个字节。)
,画出坐标容易分析,不同的设置有不同的扫描方式。根据屏幕来确定开窗的长宽(此处x方向为宽,y为长。与扫描方式有关,注意理解,若扫描方向向下,若xy不变,则x方向为长,y为宽)。
对于芯片的操作我感觉考察的主要是理解能力与英文能力,需要的是耐心与细心。而应用程序考察的主要是编程能力与全局意识。(原材料、零件、产品)
中文编码
操作系统简要 操作系统从广义讲就是管理计算机的软硬件资源,其实主要的就是任务调度,例如优先级管理的,一个高优先级的任务来了,需要运行,但此时运行着其他任务的,我怎么样获取cpu,被中断的那个任务下次运行时怎么从被中断处继续运行,怎么与其他的任务进行通讯。进入延时函数后怎么释放cpu,给哪个任务等,这就是操作系统的事。对于硬件管理就是让不让该任务访问等。 |