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

intitle 郑州网站建设吉林黄页电话查询

intitle 郑州网站建设,吉林黄页电话查询,网站制作哪家好又便宜,代码编辑器做热点什么网站好最近移植工程,需要把F407的工程移植到H7系列中去,原先的工程SPI是直接操作寄存器去发送和接收与其它芯片通信!在移植到H7的工程里后,测试发现,SPI通信的出现问题,通过仿真调试和示波器测试信号(…

最近移植工程,需要把F407的工程移植到H7系列中去,原先的工程SPI是直接操作寄存器去发送和接收与其它芯片通信!在移植到H7的工程里后,测试发现,SPI通信的出现问题,通过仿真调试和示波器测试信号(时钟和片选信号),最后发现卡在了判断接收的while判断上!

时钟树配置

 spi的时钟频率为183.3MHZ,2倍频后为91.6MHZ,4倍频为45.8MHZ

spi的代码配置

 在main.c中使用spi的相关库函数去接收和发送,进行验证!

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);//片选拉低
HAL_SPI_TransmitReceive(&hspi1,Txbuf_inv16,Rxbuf_inv16,4,1000);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);//片选拉高
delay(50);//延时50us

在main函数前定义的接收和发送数组,这里发送的是16位数据;

uint16_t Txbuf_inv16[4] = {0x0001,0x0002,0x0003,0x0004};//测试使用
uint16_t Rxbuf_inv16[4] = {0,0,0,0};

通过示波器采集的信号(片选和时钟)如下:总共花费2.6us左右时间!

 频率也为45MHZ,跟预期结果相符!

后面将SPI1的发送和接收修改成操作寄存器:

    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);  // CS低电平(有效)for (uint8_t s = 0; s < 4; s++) {//----------- 发送 -----------//while((SPI1->SR&1<<1)==0);                //等待发送区空*((__IO uint16_t *)&SPI1->TXDR) = Txbuf_inv16[s];	//----------- 接收 -----------//while((SPI1->SR&1<<0)==0);                //等待接收完Rxbuf_inv16[s] = *((__IO uint16_t *)&SPI1->RXDR);}HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);  // CS高电平(无效)delay(50);//延时50us

发现程序会卡在while((SPI1->SR&1<<0)==0);这一行,导致片选无法拉高,时钟信号没有!

先看一下SR寄存器(状态寄存器)的介绍:

 参考网上一些历程改为:

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);  // CS低电平(有效)
SPI1->CR1|=1<<0;                                //SPE=1,使能SPI1
SPI1->CR1|=1<<9;                                  //CSTART=1,启动传输for (uint8_t s = 0; s < 4; s++) {//----------- 发送 -----------//while((SPI1->SR&1<<1)==0);                //等待发送区空*((__IO uint16_t *)&SPI1->TXDR) = Txbuf_inv16[s];	//----------- 接收 -----------//while((SPI1->SR&1<<0)==0);                //等待接收完一个byte Rxbuf_inv16[s] = *((__IO uint16_t *)&SPI1->RXDR);SPI1->IFCR|=3<<3;                                //EOTC和TXTFC置1,清除EOT和TXTFC位    }SPI1->CR1&=~(1<<0);                   //SPE=0,关闭SPI1,会执行状态机复位/FIFO重置等操作HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);  // CS高电平(无效)
delay(50);

 发现可以执行,并且可以检测到信号!频率45MHZ,共花费3.28us时间!

 CR1寄存器(控制寄存器 1)

 IFCR(中断/状态标志清零寄存器)寄存器

 后面又将SPI改为2分频,也就是91MHZ,经过测试,库函数和寄存器操作,时钟频率都可以达到91MHZ,并且总共花费时间两者相差不大(1.7~1.8us)!

http://www.dtcms.com/wzjs/400396.html

相关文章:

  • 网站备案密码格式潍坊网站开发公司
  • 公司的网站建设费用怎么入账信息如何优化上百度首页
  • wap网网站的优化
  • 公司网站首页制作教程百度推广怎么收费标准案例
  • 创办网站seo的流程是怎么样的
  • 做推广送网站免费建站谷歌海外广告投放
  • 做网站编辑有前途网页制作工具有哪些
  • 做定制的B2b网站百度云网页版登录入口
  • 临漳网站建站新东方英语培训机构官网
  • 网站建设岗位的简介win10优化大师
  • 网站名称推荐谷歌推广新手教程
  • 中国志愿者服务网站登录注册成品短视频软件大全下载手机版
  • 隆尧做网站网站注册搜索引擎的目的是
  • 有没有小学生做兼职的网站搜索引擎营销与seo优化
  • 网站开发的测试计划好消息疫情要结束了
  • 香港出入境最新消息百度seo软件
  • 贵州省建设厅考证官方网站seo网络推广机构
  • 做海报设计的网站百度关键词排名推广话术
  • 镇江高端网站建设工作室免费建一个自己的网站
  • 福州男同性做基网站网页生成
  • 怎么做才能设计出好的网站百度推广费用多少
  • 大学生做偷拍视频网站文件外链网站
  • 合肥做网站优化哪家好潍坊网站建设优化
  • 高端网站设计教程自己怎么免费做网站
  • wordpress的live2D深圳龙岗区优化防控措施
  • 适合大学生做兼职的网站有哪些企业seo排名哪家好
  • 云南微网站建设的公司有哪些整合营销公司排名
  • 网站开发技术交流推客平台
  • 聊城网站制作工作室公司网页网站建设
  • 公众号代运营平台优化设计答案四年级上册语文