当前位置: 首页 > news >正文

网站首页html制作代码互联网技术论文

网站首页html制作代码,互联网技术论文,Wordpress多重筛选插件,wordpress侧栏菜单文章目录 前言一、内部函数的实现1.1 选中和取消选中SPI Flash1.2 写使能函数1.3 获取读状态1.4 等待就绪状态 二、Flash读写函数实现2.1 读Flash ID2.2 擦除某个扇区2.3 写扇区2.4 读数据 三、测试代码总结 前言 SPI Flash 存储器在嵌入式系统中扮演着重要角色#xff0c;它… 文章目录 前言一、内部函数的实现1.1 选中和取消选中SPI Flash1.2 写使能函数1.3 获取读状态1.4 等待就绪状态 二、Flash读写函数实现2.1 读Flash ID2.2 擦除某个扇区2.3 写扇区2.4 读数据 三、测试代码总结 前言 SPI Flash 存储器在嵌入式系统中扮演着重要角色它可以为微控制器提供额外的存储空间并且具有快速的读写速度和较大的存储容量。W25Q64 是一款常见的 SPI Flash 存储器容量为64Mb采用 SPI 接口进行通信。在 STM32 微控制器上实现对 W25Q64 的功能使用可以通过 STM32 CubeMX 和相关的库函数轻松完成。本文将介绍如何利用 STM32 CubeMX 和 SPI 库来实现对 W25Q64 的基本功能。 一、内部函数的实现 1.1 选中和取消选中SPI Flash 当CS引脚为GPIO_PIN_RESET为选中该设备当CS引脚为GPIO_PIN_SET表示取消选中该设备所以这个函数非常好实现只需要使用HAL_GPIO_WritePin函数进行写pin即可 static void SPIFlash_Select(void) {HAL_GPIO_WritePin(GPIOC,GPIO_PIN_4,GPIO_PIN_RESET); }static void SPIFlash_DeSelect(void) {HAL_GPIO_WritePin(GPIOC,GPIO_PIN_4,GPIO_PIN_SET); }1.2 写使能函数 如果你需要写使能你只需要发送命令0x06即可你可以使用查询方式来发送也可以使用中断函数来发送。 在发送命令的时候你需要选中该Flash设备当你写完命令后需要取消选中Flash设备。 我们可以这样实现他 static volatile int g_spi1_tx_complete 0; void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi) {if(hspi hspi1){g_spi1_tx_complete 1;} }void Wait_SPI_TxCplt(int timeout) {while(g_spi1_tx_complete 0 timeout--){HAL_Delay(1);}g_spi1_tx_complete 0; }static int SPIFlash_WriteEnable(void) {uint8_t buf[1] {0x06};SPIFlash_Select();HAL_SPI_Transmit_IT(hspi1,buf,1);Wait_SPI_TxCplt(SPI_FLASH_TIMEOUT);SPIFlash_DeSelect(); }1.3 获取读状态 当我们擦除扇区或者写扇区的时候他并不是发送数据完成这个数据就写进去的我们需要等待他内部编程完。我们可以使用命令把里面的状态拿出来 在这里我们需要发送2个命令但是有用的只有命令1(发送的命令为0x05)因为发送了2个命令所以我们需要接收两个数据但是有用的只有接收到的数据2。 static volatile int g_spi1_txrx_complete 0; void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi) {if(hspi hspi1){g_spi1_txrx_complete 1;} }void Wait_SPI_TxRxCplt(int timeout) {while(g_spi1_txrx_complete 0 timeout--){HAL_Delay(1);}g_spi1_txrx_complete 0; }static int SPIFlash_ReadStatus(void) {uint8_t txbuf[2] {0x05,0xff};uint8_t rxbuf[2] {0,0};SPIFlash_Select();HAL_SPI_TransmitReceive_IT(hspi1, txbuf, rxbuf, 2);Wait_SPI_TxRxCplt(SPI_FLASH_TIMEOUT);SPIFlash_DeSelect();return rxbuf[1]; }1.4 等待就绪状态 所谓的等待就绪状态其实就是当SPIFlash_ReadStatus函数上1他还是等于1就代表擦除扇区或者写扇区已经完成了 static int SPIFlash_WaitReady(void) {while(SPIFlash_ReadStatus() 1 1); }二、Flash读写函数实现 2.1 读Flash ID 读Flash ID可以让我们知道这个SPI Flash是否有用 和前面的获取读状态一样。在这里我们需要发送2个命令但是有用的只有命令1(发送的命令为0x9F)因为发送了2个命令所以我们需要接收两个数据但是有用的只有接收到的数据2。 int SPIFlash_ReadID(void) {uint8_t txbuf[2] {0x9F,0xff};uint8_t rxbuf[2] {0,0};SPIFlash_Select();HAL_SPI_TransmitReceive_IT(hspi1, txbuf, rxbuf, 2);Wait_SPI_TxRxCplt(SPI_FLASH_TIMEOUT);SPIFlash_DeSelect();return rxbuf[1]; }当rxbuf[1]的值为0xEF时代码这个SPI Flash没有问题 2.2 擦除某个扇区 首先我们要发送命令加上3个字节的地址所以我们需要4字节的buf 如果你想擦除某个扇区你需要使用0x20命令。 接下来我们往buf的后3字节填充地址地址是先发高位再发低位的。 再完成发送之后我们还需要等待就绪即调用SPIFlash_WaitReady函数 int SPIFlash_EraseSector(uint32_t addr) {SPIFlash_WriteEnable();uint8_t txbuf[4] {0x20};txbuf[1] addr16 0xff;txbuf[2] addr8 0xff;txbuf[3] addr0 0xff;SPIFlash_Select();HAL_SPI_Transmit_IT(hspi1,txbuf,4);Wait_SPI_TxCplt(SPI_FLASH_TIMEOUT);SPIFlash_DeSelect();SPIFlash_WaitReady();return 0; }2.3 写扇区 写操作在发送命令地址的和我们的擦除某个扇区的是一样的只不过我们的写扇区的命令为0x02 再发送完命令地址之后我们就可以直接调用HAL库的发送函数进行datas的发送即可。 int SPIFlash_Write(uint32_t addr,uint8_t *datas,uint32_t len) {SPIFlash_WriteEnable();uint8_t txbuf[4] {0x02};txbuf[1] addr16 0xff;txbuf[2] addr8 0xff;txbuf[3] addr0 0xff;SPIFlash_Select();HAL_SPI_Transmit_IT(hspi1,txbuf,4);Wait_SPI_TxCplt(SPI_FLASH_TIMEOUT);HAL_SPI_Transmit_IT(hspi1,datas,len);Wait_SPI_TxCplt(SPI_FLASH_TIMEOUT);SPIFlash_DeSelect();SPIFlash_WaitReady();return 0; }2.4 读数据 读操作在发送命令地址的和我们的擦除某个扇区的是一样的只不过我们的写扇区的命令为0x03 在写完上面这些数据之后我们需要等待写完接下来我们就可以去调用HAL库的读SPI函数了 static volatile int g_spi1_rx_complete 0;void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi) {if(hspi hspi1){g_spi1_rx_complete 1;} }void Wait_SPI_RxCplt(int timeout) {while(g_spi1_rx_complete 0 timeout--){HAL_Delay(1);}g_spi1_rx_complete 0; }int SPIFlash_Read(uint32_t addr,uint8_t *datas,uint32_t len) {uint8_t txbuf[4] {0x03};txbuf[1] addr16 0xff;txbuf[2] addr8 0xff;txbuf[3] addr0 0xff;SPIFlash_Select();HAL_SPI_Transmit_IT(hspi1,txbuf,4);Wait_SPI_TxCplt(SPI_FLASH_TIMEOUT);HAL_SPI_Receive_IT(hspi1,datas,len);Wait_SPI_RxCplt(SPI_FLASH_TIMEOUT);SPIFlash_DeSelect();return 0; }三、测试代码 char *str www.csdn.net\r\n;r SPIFlash_ReadID(); SPIFlash_EraseSector(4096); SPIFlash_Write(4096,(uint8_t*)str,strlen(str)1); SPIFlash_Read(4096,(uint8_t*)flash_buf,20);总结 通过本文的介绍我们了解了如何在 STM32 CubeMX 中配置并利用 SPI 库来实现对 W25Q64 SPI Flash 存储器的功能。首先我们通过 CubeMX 配置了 STM32 的 SPI 外设包括时钟分频、数据大小、模式等参数。然后我们编写了初始化代码将 SPI 外设与 W25Q64 进行连接并实现了基本的读写功能。在编写代码时我们充分利用了 STM32 的 HAL 库提供的函数简化了通信过程的实现。最后我们在主函数中调用了相应的读写函数并通过调试工具验证了功能的正确性。通过本文的学习读者可以掌握在 STM32 微控制器上使用 CubeMX 和 SPI 库来实现对 W25Q64 SPI Flash 存储器的功能为嵌入式系统的开发提供了便利。
http://www.zqtcl.cn/news/43723/

相关文章:

  • 西安做网站seo网站风格和功能设计方案
  • 国外网站seo免费论坛网站开发技术
  • 帝国网站网站手机版怎么做云浮东莞网站建设
  • 个人网站建设的论文南阳网(网站).
  • 网站备案取消流程下一页p30
  • 推送网站建设奇墙网站建设
  • 企业建网站服务人跟狗做网站
  • 做网站编辑需要具备的素质定做专业营销型网站
  • 网站开发需要的知识和技术做的网站是怎么被收录
  • 现在不流行做网站了么专业提供网站制作
  • 成都在哪建设网站珠海正规网站制作排名费用多少
  • 本地网站环境搭建自己做的网站能被别人看到吗
  • 网站建设公司的正反免费wordpress申请
  • 网站建设中网站图片如何修改html制作一个电影介绍页面
  • 可以做外链的视频网站单网页网站扒站工具
  • 加拿大pc网站搭建建一个做笔记的网站
  • 赫章网站建设北京住房城乡建设部网站
  • 长春火车站到龙嘉机场怎么走网站推广用什么方法最好
  • 站长工具天美传媒企业微信网页版
  • 做网站哪种编程语言最好企业网站怎么建设方案
  • 怎样用c语言做网站第1ppt模板免费下载
  • 坪山网站建设公司宁波自助建站公司
  • flashfxp上传了网站网站加水印
  • 淄博网站建设程序在线商标免费设计
  • 郴州市官网大同优化推广
  • 万网网站到期后续费一年多少钱wordpress主题编辑
  • 建设一个怎样的自己的网站wordpress落叶插件
  • 建设工程规范发布网站wordpress 企业网站
  • 互联网招聘网站网站开发原创动漫
  • 提供网站建设惠州网站小程序建设点