怎样读写stm32单片机优点

据counterpoint发布的数据,2017年全球前六大手机芯片企……
2018年才刚过没多久,区块链概念股一片火热。沉寂已久的……
近日三星电子宣布开发出核心电池技术,其研究机构三星先……
&&2018新能源与智能联网汽车创新发展论坛成……
近几年,对于买车客户的需求有关注的话,会发现客户越来……
演讲人:沈剑安时间: 10:00:00
演讲人:孙彬时间: 10:00:00
演讲人:郝晓贝时间: 10:00:00
预算:¥50000预算:¥50000
广东省北京市
STM32 通用IO读写
[导读] STM32是基于ARM Cortex-M3内核的芯片,专为要求高性能、低成本、低功耗的嵌入式应用设计的芯片。1μs的双12位ADC,4兆位/秒的UART,18兆位/秒的SPI,18MHz的I/O翻转速度。
&STM32是基于ARM Cortex-M3内核的芯片,专为要求高性能、低成本、低功耗的嵌入式应用设计的芯片。1&s的双12位ADC,4兆位/秒的UART,18兆位/秒的SPI,18MHz的I/O翻转速度。
我学的是STM32F103。它的内核为:ARM 32位的Cortex -M3 CPU,它的工作频率最高可以达到72MHZ。2个12位AD(16路通道),80个通用I/O接口,7个定时器,9个通信接口。
(一)通用I/O接口
主要要达到的目的是:1、了解通用I/O接口的接口和性能。2、了解复用功能和重映射。3、掌握通用I/O接口的程序设计方法。
1.1.1通用I/O(GPIO)接口的结构:
一个GPIO引脚包含以下几个寄存器:①两个32位的配置寄存器(GPIOx_CRL,GPIOx_CRH),②两个32位的数据寄存器(GPIOx_IDR,GPIOx_ODR),③一个16位的复位寄存器(GPIOx_BRR),④一个32位的置位/复位寄存器(GPIOx_BSRR),⑤一个32位的锁定寄存器(GPIOx_LCKR)。所有寄存器不允许按照半字节或字节访问,必须按32位字访问。
1.1.2每一个GPIO引脚都可以在程序中配置成如下几种模式:输入悬空,输入上拉,输入下拉,模拟输入,开漏输出,推挽式输出,,推挽式复用功能,开漏复用功能。
这些模式通过CNF[1:0]和MODE[1:0]来完成配置
1.2.1通用I/O(GPIO)接口的功能
GPIO有四种功能:1通用的I/O接口。2单独的为设置或者位删除。3外中断/唤醒线、4复用功能(AF)和重映射、5GPIO的功能锁定
1.2.11通用I/O:在复位期间和刚复位之后,复位功能未开启,I/O口被配置成浮空输入模式(CNFx[1:0]=01b,MODE[1:0]=00b)
1.2.12单独的位设置和位清除:当对GPIOx_ODR的个别位进行设置时,在单次APB2写操作里,可以改变一个或多个位。这是通过对GPIOx_BSRR和GPIOx_BRR来实现的。想改变某一位可以单独对这位写1,写0则此位不被更改。
1.2.13外部中断:当使用外部中断线时,相应引脚必须配置成&输入模式&。
1.2.14复用功能(AF)和重映射:
复用输入:端口可以配置成输入模式和输出模式
复用输出:端口必须配置成复用功能输出模式(推挽或开漏),这样使引脚和输出寄存器断开,并和片上外设的输出信号连接。
双向复用功能:端口必须配置成复用模式功能输出模式(推挽和开漏)
1.2.15GPIO的锁定机制:为了防止I/O配置被更改,可以单独对某个位进行锁定使其在下一次复位之前不可以在被更改。
1.2.2GPIO的功能配置
1.2.21输入配置
1.2.22输出配置
1.2.23复用功能配置
1.2.24模拟输入配置
1.2.3复用功能与重映射
①OSC_IN和OSC_OUT引脚通过AFIO_MAPR来实现对他们的重映射。
②BXCAN可以被映射到端A、B、D上,由CAN_REMAP[1:0]来设置
③调试接口信号的映射
④定时器的重映射分别由TIM1_REMAP[1:0],TIM2_REMAP[1:0],TIM3_REMAP[1:0],TIM4_REMAP[1:0]来设置
⑤USART1的重映射由寄存器USART1_REMAP[1:0];来设置=0为PA9和PA10,=1为PB6和PB7。
USART2的重映射寄存器为USART2_REMAP[1:0].
USART3的重映射寄存器为USART3_REMAP[1:0]
⑥I2C的重映射寄存器为I2C_REMAP=0为PB6和PB7,=1为PB8和PB9,
⑦SPI1的重映射寄存器为SPI1_REMAP=0为PA4,PA5,PA6,PA7.SPI1_REMAP=1为PA15,PB3,PB4,PB5
2.1.1通用I/O接口的编程方法
公司已经提供了比较完善的通用I/O的接口库,其位于&stm32f10x_gpio.c&中对应的头文件为&stm32f10x_gpio.h&
GPIO_DeInit函数:GPIO寄存器复位为默认值
GPIO_AFIODeInit函数:复用功能寄存器复位为默认值
GPIO_Init函数:用于按照指定参数初始化GPIO部件
GPIO_StructInit函数:用于为GPIO_InitStruct各个成员赋默认值
GPIO_ReadInputDataBit函数:用以读取特定输入端口引脚
GPIO_ReadInputData函数:用于读取特定GPIO输入端口引脚
GPIO_ReadOutputDataBit函数:用于读取特定输出数据端口位
GPIO_ReadOutputData函数:用于读取特定GPIO输出数据端口
GPIO_SetBits函数:用于置位选定的数据端口位
GPIO_ResetBits函数:用于清除选定的数据端口位
GPIO_WriteBit函数:
GPIO_Write函数:用于写数据到特定的端口
GPIO_PinLockConfig函数:用于锁定GPIO引脚配置寄存器
GPIO_EventOutputConfig函数:用于选择GPIO引脚用作事件输出
GPIO_EventOutputCmd函数:GPIO使能(禁用)事件输出
GPIO_PinRemapConfig函数:用于改变特定引脚的映射
GPIO_EXTILineCongig函数:用于选择GPIO引脚作为EXTI线
GPIO寄存器结构
typedef struct
vu32 BSRR;
vu32 LCKR;
}GPIO_TypeDef;
复用功能寄存器结构:
typedef struct
vu32 EVCR;
vu32 MAPR;
vu32 EXTICR[4];
}AFIO_TypeD本文引用地址:
在上个月初意法半导体(ST)公布的截至日的第一季度财报上,ST宣布
2015年第一季度净收入总计17.1亿美元,毛利率为33.2%,每股净亏损0.03美元。虽然季节性需求疲软影响了传感器、功率及汽车产品的收入业绩......关键字:
意法半导体(STMicroelectronics,简称ST)与位于意大利的国际性科学技术研究机构&&意大利理工学院(Istituto
Italiano di
Tecnologia,IIT)宣布签订一份合作协议,双......关键字:
21ic讯 意法半导体发布新款STM32Cube&开发平台中间件,让开发人员可以在该开发平台上开发STM32 F2 120MHz ARM&
Cortex&-M3微控制器应用。STM32C......关键字:
我们知道,被枪击中是致命的。一颗来自AK-47突击步枪的子弹能以超过670米/秒的速度射向目标,这一速度大约是音速的两倍。尽管子弹重量大约只有5克,但它释放的能量,相当于一块砖从30楼掉下来。
......关键字:
我 要 评 论
热门关键词1,679被浏览438,032分享邀请回答62748 条评论分享收藏感谢收起29236 条评论分享收藏感谢收起还没有帐号? 赶紧
用户版块帖子
STM32单片机制作的双盘符U盘 /w\
UID:1543672
在线时间27小时
M币634专家7
近来在鼓捣STM32,玩了两个星期,感觉都玩的差不多了,于是准备做个U盘。首先晒自制的STM32开发板(其实上面就一个LDO稳压器提供3.3V)它曾经只素一个LQFP转接板...掺了USB背面有点纠结啊,因为素漆包线飞线出来的整个U盘长这样/w\属性页(25Q16有2MB,没全用)整个板子上只集成了STM32 USB接口和稳压器,其他的都需要外接窝从来不用开发板,因为觉得从硬件开始搭才能真正学习单片机这次采用的是STM32F103R8T6,软件方面采用ST公司官方的USB例子()打磨而来首先把修改好的文件给放出来:在Project\Mass_Storage\RVMDK中打开MassStorageSimpleBuffer.uvprojx,然后编译下载到STM32,再把STM32插入USB口,就能看到两个未格式化的分区,格式化之后可以储存数据了注意:每次下载程序后都会清除内置Flash中的数据!本作品仅供情怀,实际请谨慎使用,不要保存重要数据!下面简单说一下怎么做到的1、USB的D-和D+分别接到PA11(USBDM)和PA12(USBDP)上,PA12(USBDP)即D+通过跳线使上拉1.5K电阻到VCC(3.3V),SPI Flash(25Q16)的MISO、MOSI、CLK分别连接到STM32的SPI1,详见STM32 datasheet, 选片CS连接到PC12,25Q16的写保护等引脚接3.3V一下过程采用原版的USB例子,修改过的可以直接下载2、在编译那个菜单里面的组合框中选择STM3210E-EVAL选择菜单 Project-&Options for Target 'STM3210E-EVAL'在Output选项卡里把Create HEX File选上在C/C++选项卡里的Preprocessor Symbols里的Define: USE_STM3210E_EVAL清除3、usb_pwr.c把PowerOn和PowerOff()面里的USB_Cable_Config(ENABLE);和USB_Cable_Config(DISABLE);这两句删掉,因为没有准备用这个控制电路(通过跳线把USBDP通过1.5K电阻接通到3.3V)这时候把程序直接编译然后下载到STM32,然后把它插到电脑的USB上就能识别到两个可移动磁盘了4、usb_desc.c修改这两个常数为自己想要的 格式看了就懂了MASS_StringVendor 公司名MASS_StringProduct 产品名usb_desc.hMASS_SIZ_STRING_VENDOR和MASS_SIZ_STRING_PRODUCT素描述MASS_StringVendor和MASS_StringProduct的长度,包括0和开头两个东西的长度,修改字符串之后不要忘了修改MASS_SIZ_STRING_VENDOR和MASS_SIZ_STRING_PRODUCT5、scsi_data.c找到Standard_Inquiry_Data和Standard_Inquiry_Data2,里面有3个字符串可以修改注意他们的长度不要修改,长度就那么长,多了少了不行6、memory.cuint32_t Data_Buffer[BULK_MAX_PACKET_SIZE * 16]; /* 4096 bytes*/改下这个,因为这个决定了数据缓存有多大的区域,需要大于等于一个扇区的大小这里内部flash一个扇区1kb,25Q16一个扇区4Kb,所以设定为4kb缓存,就素4096byte = 64byte * 16, 64byte素一个usb包传输的大小,不用管他7、usb_scsi.c增加一个函数在最上面:uint8_t* Get_Custom_Inquiry_Data(uint8_t lun){&&&&return lun == 0 ? Standard_Inquiry_Data : Standard_Inquiry_Data2;}在SCSI_Inquiry_Cmd(uint8_t lun)中把if(lun==0)啥的那段改成Inquiry_Data = Get_Custom_Inquiry_Data(lun);在SCSI_Format_Cmd中把NAND_Format();这行注解掉其实窝还不太明白SCSI_Format_Cmd中到底需不需要对Flash或者NAND进行相关操作,窝认为这个命令只是一个查询功能,真正格式化靠的是上位机系统软件,所以只要SCSI的Write10操作没问题就能格式化成功8、mass_mal.c这个才是本作的重点!里面有4个函数:MAL_Init,MAL_Write,MAL_Read,MAL_GetStatus分别负责初始化,写扇区,读扇区和读取状态和扇区信息每个函数都有个lun参数,用来决定是那个分区要被读取这里的lun只可能是0和1,因为咱们只有两个分区,一个内部flash一个SPI的flash的这些函数都有返回值的,操作成功返回MAL_OK,失败返回MAL_FAIL1、首先在MAL_Init里面修改Flash们的初始化方式,对于SPI Flash是Flash25_Init(位于flash25.h),对于内部Flash则为FLASH_Unlock(位于STM32固件库内)2、然后系统会调用MAL_GetStatus读取两个分区的信息Mass_Block_Count 总块数Mass_Block_Size 一个扇区的大小,对于25Q16是4kb,对于内部Flash来说是1kbMass_Memory_Size 整个Flash的大小,不能大于Flash能承受的大小哦3、MAL_Read和MAL_Write这两个函数起着核心的作用,负责直接与Flash的驱动接轨。u32 Memory_Offset 代表内存地址偏移,就是读写开始的位置u32 *Writebuff 和 u32 *Readbuff 是指向读写缓冲区的指针,指针指向的区域是u32类型的,也就是1个word(4个字节)u16 Transfer_Length 需要传输数据的字节数,注意不是word的数量哦,是byte的个数!9、flash25.c(自己加的,原版木有,参考修改过的)掌管着SPI Flash 25Q16的操作,包括初始化,读写还有擦出功能一般SPI Flash的驱动读写都是用的1字节为基本单位的缓冲区,而这里用的是word为单位的,所以窝修改之后的程序里面用的25Q16驱动和一般的驱动不太一样,是自己写的捏重点是批量读取Word函数void Flash25_Read(u32 address, u32 *Readbuff, u16 length){&&&&u16&&&&u8 buffer[4];&&&&&&&&&&&&SPI_CS_LOW();&&&&SPI_WriteByte(FLASH25_READ);&&&&SPI_WriteByte((address & 0x00FF0000) && 16);&&&&SPI_WriteByte((address & 0x0000FF00) && 8);&&&&SPI_WriteByte((address & 0x000000FF));&&&&for(i=0;i&i+=4){&&&&&&&&buffer[0] = SPI_ReadByte();&&&&&&&&buffer[1] = SPI_ReadByte();&&&&&&&&buffer[2] = SPI_ReadByte();&&&&&&&&buffer[3] = SPI_ReadByte();&&&&&&&&Readbuff[i&&2] = (buffer[0] && 24) | (buffer[1] && 16) | (buffer[2] && 8) | buffer[3];&&&&}&&&&&&&&SPI_CS_HIGH();}和写入一个Word长度的数据:void Flash25_WriteWord(u32 address, u32 data){&&&&FLASH25_WriteEnable();&&&&&&&&SPI_CS_LOW();&&&&SPI_WriteByte(FLASH25_WRITE);&&&&SPI_WriteByte((address & 0x00FF0000) && 16);&&&&SPI_WriteByte((address & 0x0000FF00) && 8);&&&&SPI_WriteByte((address & 0x000000FF));&&&&SPI_WriteByte((data & 0xFF000000) && 24);&&&&SPI_WriteByte((data & 0x00FF0000) && 16);&&&&SPI_WriteByte((data & 0x0000FF00) && 8);&&&&SPI_WriteByte((data & 0x000000FF));&&&&&&&&SPI_CS_HIGH();&&&&FLASH25_WaitForWriteEnd();}还有用于擦除一个扇区的void Flash25_SectorErase(u32 address){&&&&FLASH25_WriteEnable();&&&&SPI_CS_LOW();&&&&SPI_WriteByte(FLASH25_SE);&&&&SPI_WriteByte((address & 0xFF0000) && 16);&&&&SPI_WriteByte((address& 0xFF00) && 8);&&&&SPI_WriteByte(address & 0xFF);&&&&SPI_CS_HIGH();&&&&FLASH25_WaitForWriteEnd();}这三个是最重要的函数,其他还有些函数,他们都被调用过的Flash25_ReadID这个函数用于检验25Q16和STM32的通信,实际没用常见问题:1、为什么在代码中找不到任何文件系统相关?因为文件系统是PC上的操作系统来搞定的,操作系统可能是Windows,Linux,Mac甚至其他奇怪的东西啊示波器都有可能,文件系统可能是FAT32,exFAT,NTFS,EXT4等等,作为USB适配器的STM32不需要知道这些,只需在规定的时候读写扇区即可,实际编程中在MAL_Read和MAL_Write中实现这些功能2、为什么格式化失败?一般来说格式化的失败是读取和写入的失败,如果遇到不能格式化的问题先检查相关Flash的初始化以及读取写入擦除是否正常工作,窝在调试好25Q16的读写之后很快就成功了3、HardFault_Handler是怎么回事有的时候程序会卡住,然后debug下发现是程序进到HardFault_Handler里了。HardFault_Handler的原因多半是内存溢出,最有可能的就是memory.c里面的uint32_t Data_Buffer这行,可能是某个Flash的扇区大小超过了缓冲区的大小导致的,把这个缓冲的大小改大就解决问题了。深度打磨:如何修改有几个盘符呢?在usb_prop.c中有这么一行uint32_t Max_Lun = 1;,Max_Lun的值等于盘符数量-1,然后在usb_scsi.c,mass_mal.c等文件中把Mass_Block_Count[2],Mass_Block_Size[2],Mass_Memory_Size[2]的长度都改成盘符的数量,最后在mass_mal.c中添加相关处理过程即可。这个窝还没有实验过,不过理论上应该不难。参考资料:http://www.52rd.com/Blog/Detail_RD.Blog_whisperer_26805.html?WebShieldDRSessionVerify=5ZhhM3tT565unfPL0iqJhttp://bh7kqk.blog.163.com/blog/static//http://blog.sina.com.cn/s/blog_ae3f6c0f01017nyf.html[ 此帖被琪露诺在 23:13重新编辑 ]
本文内容包含图片或附件,获取更多资讯,请
后查看;或者
成为会员获得更多权限
UID:1038188
在线时间1565小时
M币9790专家99
我居然是沙发啊?
UID:1166518
在线时间1387小时
M币2专家25
优秀文章,可惜数码只看图..加了个分,让豪绅抢先了 &&&&
UID:999336
在线时间2859小时
M币6102专家9
板凳~围观大神做U盘
UID:1104730
在线时间562小时
M币3406专家12
回 zxase258 的帖子
:我居然是沙发啊?&( 20:09)&我连凳子都没抢着,借你坐会吧
UID:239985
在线时间1528小时
M币6672专家13
我刚打算把很多参数什么的放到tf卡,如果没有要求保密什么的话,求楼主的工程包.
UID:872681
在线时间602小时
M币4396专家1
厉害啊,两周就做出来了
UID:1543672
在线时间27小时
M币634专家7
回 decai 的帖子
:我刚打算把很多参数什么的放到tf卡,如果没有要求保密什么的话,求楼主的工程包.&( 14:14)&工程包已经发在帖子里面了另外TF卡的话应该和SD的操作差不多,用官方的历程就可以了
UID:1543672
在线时间27小时
M币634专家7
回 akikyoua 的帖子
:厉害啊,两周就做出来了&( 15:28)&主要是有STM8的基础,用STM32的固件库上手挺快的
UID:1326666
在线时间585小时
M币243专家4
FULLSPEED,跑满也就200K/S左右。你的LQFP焊盘很有意思。要加密的话可以考虑把文件写到MCU的BKP或者代码区,或者利用SPI的flash和MCU的ID做算法参数。感觉STM的定时器玩好了,其他都不难。
访问内容超出本站范围,不能确定是否安全
温馨提示:所有技术区严禁灌水,“沙发”“顶”字样;禁止广告贴;以免被删除
您目前还是游客,请
&回复后跳转到最后一页
Code by , Time now is:04-11 06:03, Total 0.306020(s) query 7,
Gzip enabled&查看: 7519|回复: 15
stm32f103想要实现读写u盘。。???
主题帖子精华
初级会员, 积分 95, 距离下一级还需 105 积分
在线时间0 小时
stm32f103想要实现读写u盘。。???
&有人推荐ch376芯片(国产的) ,网上看了看有人说资料什么的不太完善,不知道有人用过没有。
有没有别的芯片可以实现求推荐下。。。。
主题帖子精华
初级会员, 积分 95, 距离下一级还需 105 积分
在线时间0 小时
我自己顶吗。。。
主题帖子精华
初级会员, 积分 107, 距离下一级还需 93 积分
在线时间0 小时
我有CH376S那个U盘读写模块,资料提供一个文件系统。完善我不大清楚指的是什么,我还没开始用,还在做SD卡的。
主题帖子精华
初级会员, 积分 107, 距离下一级还需 93 积分
在线时间0 小时
回复【2楼】leinou:
---------------------------------
资料完善是指例程多还是功能多呢?例程好像很少奥,功能完善不完善还不清楚。
主题帖子精华
高级会员, 积分 650, 距离下一级还需 350 积分
在线时间89 小时
CH376用过,很节省开发时间,稳定性还算可以的。
资料的话有电路和程序demo,官方api函数写的也是相当简洁清晰,很好上手。
文件系统的主流功能都可以实现,还是不错的。
互联网,智能设备爱好者,欢迎讨论任何有意思的想法。
主题帖子精华
初级会员, 积分 95, 距离下一级还需 105 积分
在线时间0 小时
回复【5楼】shibusha:
---------------------------------
恩。。。好的。。。我是用在产品上面的。。。稳定性怎么样,还有就是价格怎么样?与sd卡中间的优缺点主要是什么?
主题帖子精华
初级会员, 积分 95, 距离下一级还需 105 积分
在线时间0 小时
回复【4楼】光蛋骑士:
---------------------------------
您知道这款芯片是哪家生产的吗。。。可靠性怎么样???
主题帖子精华
初级会员, 积分 95, 距离下一级还需 105 积分
在线时间0 小时
回复【3楼】光蛋骑士:
---------------------------------
问下。。。你的sd卡接的是stm32上的sdio接口吗。。。。。
主题帖子精华
初级会员, 积分 107, 距离下一级还需 93 积分
在线时间0 小时
回复【8楼】leinou:
---------------------------------
我还没用stm32做呐,暂时用mega16L的硬件spi。
主题帖子精华
初级会员, 积分 107, 距离下一级还需 93 积分
在线时间0 小时
回复【7楼】leinou:
---------------------------------
资料上写的沁恒公司好像是。带文件系统,需要自己写接口。
主题帖子精华
中级会员, 积分 336, 距离下一级还需 164 积分
在线时间0 小时
最近也想整个读取U盘资料。
不用谢了……
主题帖子精华
初级会员, 积分 95, 距离下一级还需 105 积分
在线时间0 小时
回复【10楼】光蛋骑士:
---------------------------------
是沁恒公司。。。官网有该芯片。。。公司好像不大啊。。。。不知道有没有大牌的或者国外的企业做类似芯片的。。。
主题帖子精华
初级会员, 积分 107, 距离下一级还需 93 积分
在线时间0 小时
回复【12楼】leinou:
---------------------------------
大牌子的不清楚了,我还没开始用呢,希望稳定性好些。
主题帖子精华
金钱124209
在线时间1037 小时
CH376不错了吧,就是很贵
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子& &
主题帖子精华
初级会员, 积分 95, 距离下一级还需 105 积分
在线时间0 小时
回复【14楼】正点原子:
---------------------------------
主要是因为国产的。。。前辈不建议。。。
主题帖子精华
金钱124209
在线时间1037 小时
那就用F105/F107/F207/F407之类的了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子& &
Powered by后使用快捷导航没有帐号?
中国电子DIY
科技成就未来
亲爱的游客,欢迎!
已有账号,请
如尚未注册?
在线时间:8:00-16:00
400-123-4567
电子DIY手机版
随时随地掌握网站动态
扫描二维码
免费获取邀请码
<div class="mn"
STM32汉字字库显示实验(从SD卡读取数据)
TFT彩屏是大家经常用到的一个显示模块,用来显示字符图片等一些信息,作为产品的一个重要部分,实现人机交互。其中汉字显示是非常必要的,显示字符只需要采用对应的取模软件,把字符的点阵数据放在程序中即可。当我们要显示少量且固定的汉字时也可以采用这种方法,但是,需要大量且随机的汉字时,靠取模就不能完成了,需要汉字字库来实现。
这个实验使用的汉字大小是16*16,字库是放在SD卡根目录下sys文件夹中的。下面简单的解释一下实现过程。
先来一张图片看看实验效果。
171626xoa3oumxampzq36a.jpg (112 KB, 下载次数: 0)
14:35 上传
本实验中,涉及到SD卡的使用,文件系统的移植,LCD屏的使用等。这里主要说明的是LCD的汉字显示
首先是对SD卡的初始化,以及LCD的初始化。
然后下面开始汉字以及一些字符的显示,字符的显示还是采用的字符点阵的方式。
173813bax4zx8aldw0ntpn.png (254.65 KB, 下载次数: 0)
14:39 上传
首先是判断的显示位置,是否超过屏的显示范围,如果超过则是实现换行功能。然后下面是判断显示内容的ASCII知道下一个要显示的是字符还是汉字,如果ASCII大于0x80,则是汉字,小于0x80则是字符。因为字符是16*8,所以每显示一个字符横坐标+8,如果是汉字(16*16),横坐标是+16。如果你要使用其它大小的字体显示,请修改相应的数据
174304yzid8y85kdjs5dbk.png (17.02 KB, 下载次数: 0)
14:41 上传
在主要讲解汉字显示,字符显示和汉字一样的道理。显示汉字里面,首先开辟一个缓冲区,用来存储点阵数据,然后获取点阵数据,下面是通过获取的点阵数据来进行打点显示。注意我们是16*16的字体,所以每行16个点,一共16行。这里简单说一下打点,主要是采用设置一块16*16显示区域,然后逐一把每个点的数据送给LCD即可,注意要设置号彩屏内部的地址自增方向。否则容易出现错位等现象。注意最后要把显示区域设置成全屏显示。
180102awznx7n761ax7onx.png (20.28 KB, 下载次数: 2)
14:40 上传
怎么在字库中找到对应的汉字点阵信息,这里的文件系统已经移植好了,打开字库文件。注意的是,每个汉字都有一个内码,占两个字节,通过汉字内码的高低字节,通过公式32*((High8bit-0xa0-1)*94+(Low8bit-0xa0-1))来找到该汉字在字库中的偏移位置,然后读取32个字节,也就是该汉字的点阵数据。字体是16*16=256。256/8=32字节。最后关闭文件就可以了。
180906vijyiiy9ninzwgnn.png (163.47 KB, 下载次数: 3)
14:41 上传
最后附上整个工程文件
(663.71 KB, 下载次数: 44)
14:44 上传
点击文件名下载附件
下载积分: 下载币 -5
这个东西还有点难度的,慢慢来学习学习。
嗯嗯,加油加油!!!
零死角玩转STM32还是很不错的,可以看看
资料很好,谢谢分享
资料很好,谢谢分享
零死角玩转STM32还是很不错的,可以看看
我的金龙107也是很不错的
很好啊,慢慢学习呢。
显示许多汉字的时候还是需要字库,单独靠取模不现实。
显示许多汉字的时候还是需要字库,单独靠取模不现实。
我这个就是用字库的啊,没有用取模的
[音箱DIY论坛]
[拆机乐园/修机达人]
[音源/DAC/系统调校]
[拆机乐园/修机达人]
单片机论坛
一周热帖排行最近7x24小时热帖
客服电话:400-123-4567
客服邮箱:
周一至周五 9:00-18:00
公司地址:深圳市南山区美丽湾大厦B座
Powered by

我要回帖

更多关于 stm32单片机引脚图 的文章

 

随机推荐