搜索
bottom↓
回复: 1

求助帖 实在没有时间搞stemwin lwip求个f407的移植模板

[复制链接]

出0入0汤圆

发表于 2017-4-27 01:16:07 | 显示全部楼层 |阅读模式
本帖最后由 bg8wj 于 2017-4-27 01:16 编辑

最近搞飞行模拟机-地面站cad设计,还有面板IO,ahrs, usb I2C,实在没有精力移植stemwin5.32 Lwip的udp(不带系统)裸机的。求这两款Keil 5的stmf407的模板,std hal各一份。
作为诚意我先贡献一个模拟IO的wii nunchacks 的驱动,示波器精确调整过时序。
适用MCU stm32f407 IIC总线频率100K-400K兼容。系统时钟初始成168MHZ。
  1. //IIC初始化
  2. void IIC_Init(void)
  3. {
  4.     GPIO_InitTypeDef GPIO_Initure;
  5.      __HAL_RCC_GPIOB_CLK_ENABLE();   //使能GPIOB时钟
  6.      //PB67初始化设置 PB8 SCL PB9 SDA
  7.     GPIO_Initure.Pin=GPIO_PIN_8|GPIO_PIN_9;
  8.     GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;  //推挽输出
  9.     GPIO_Initure.Pull=GPIO_PULLUP;          //上拉
  10.     GPIO_Initure.Speed=GPIO_SPEED_FAST;     //快速
  11.     HAL_GPIO_Init(GPIOB,&GPIO_Initure);
  12.      IIC_SDA=1;
  13.     IIC_SCL=1;  
  14. }
  15. //-----------------IIC BPSdriver----------
  16. //产生IIC起始信号
  17. void IIC_Start(void)
  18. {
  19.         SDA_OUT();     //sda线输出
  20.         IIC_SDA=1;
  21.         IIC_SCL=1;delay_us(2);
  22.         IIC_SDA=0;delay_us(2);//START:when CLK is high,DATA change form high to low
  23.         IIC_SCL=0;//钳住I2C总线,准备发送或接收数据
  24. }          
  25. //产生IIC停止信号
  26. void IIC_Stop(void)
  27. {
  28.         SDA_OUT();//sda线输出
  29.         IIC_SCL=0;
  30.         IIC_SDA=0;//STOP:when CLK is high DATA change form low to high
  31.         delay_us(4);
  32.         IIC_SCL=1;
  33.         delay_us(1);  //等待SCL稳定 bg8wj修订
  34.         IIC_SDA=1;//发送I2C总线结束信号
  35.         delay_us(4);                                                                  
  36. }
  37. //等待应答信号到来
  38. //返回值:1,接收应答失败
  39. //        0,接收应答成功
  40. u8 IIC_Wait_Ack(void)
  41. {
  42.         u8 ucErrTime=0;
  43.         SDA_IN();      //SDA设置为输入  
  44.         IIC_SDA=1;delay_us(2);          
  45.         IIC_SCL=1;delay_us(2);         
  46.         while(READ_SDA)
  47.         {
  48.           ucErrTime++;
  49.          if(ucErrTime>252)//bgw8j 修订
  50.          { IIC_Stop();
  51.           return 1;}
  52.          }
  53.          IIC_SCL=0;//时钟输出0           
  54.          return 0;  
  55. }
  56. //产生ACK应答
  57. void IIC_Ack(void)
  58. {
  59.    IIC_SCL=0;
  60.   SDA_OUT();
  61.   IIC_SDA=0;
  62.   delay_us(2);
  63.   IIC_SCL=1;
  64.   delay_us(2);
  65.   IIC_SCL=0;
  66. }
  67. //不产生ACK应答                    
  68. void IIC_NAck(void)
  69. {
  70.         IIC_SCL=0;
  71.         SDA_OUT();
  72.         IIC_SDA=1;
  73.         delay_us(2);
  74.         IIC_SCL=1;
  75.         delay_us(2);
  76.         IIC_SCL=0;
  77. }                                                                              
  78. //IIC发送一个字节
  79. //返回从机有无应答
  80. //1,有应答
  81. //0,无应答                          
  82. void IIC_Send_Byte(u8 txd)
  83. {                        
  84.     u8 t;   
  85.    SDA_OUT();             
  86.     IIC_SCL=0;//拉低时钟开始数据传输
  87.     for(t=0;t<8;t++)
  88.     {              
  89.       IIC_SDA=(txd&0x80)>>7;
  90.       txd<<=1;           
  91.      delay_us(2);   //2us延时清晰SDA,SCL时钟信号 bg8wj修订
  92.      IIC_SCL=1;
  93.     delay_us(2);
  94.     IIC_SCL=0;       
  95.     delay_us(2);
  96.     }         
  97. }             
  98. //读1个字节,ack=1时,发送ACK,ack=0,发送nACK   
  99. u8 IIC_Read_Byte(unsigned char ack)
  100. {
  101.    unsigned char i,receive=0;
  102.    SDA_IN();//SDA设置为输入
  103.    for(i=0;i<8;i++ )
  104.     {
  105.         IIC_SCL=0;
  106.        delay_us(2);
  107.         IIC_SCL=1;
  108.        receive<<=1;
  109.        if(READ_SDA)receive++;
  110.        delay_us(2);               
  111.    }                                         
  112.     if (!ack)
  113.         IIC_NAck();//发送nACK
  114.     else
  115.         IIC_Ack(); //发送ACK   
  116.     return receive;
  117. }
复制代码

程序不是我写的,我只是用示波器修订几处延时以保证兼容所有山寨的原装的wii
关于wii的初始化,山寨货通用方法
0xA4鸡腿的写地址,0xA5鸡腿的读地址(均为8bit地址。
初始化
stat,0xa4,devack,0xf0,devack,0x55,devack,stop,
stat,0xa4,devack,0xfb,devack,0x00,devack,stop,
转换开启:
stat,0xa4,devack,0x00,devack,stop,
连续读取0xA5处6个字节
Stat,0xa5,devack,bit1,mastack,---bit6,mastnoack,stop
使用上面修订过的IIC模拟驱动,可以顺利连续读出wII鸡腿的,六个字节。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2017-4-27 01:24:37 | 显示全部楼层
示波器结合修订时序后读山寨鸡腿正常。对比。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-27 11:30

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表