这个代码有什么问题?
时间:10-02
整理:3721RD
点击:
我的板子是CH452的SDA,和SCL分别连接STM34F103的B6,PB7.双线,而且SDA做输入和输出。木有INT#.。下载的别人的例程但是环境貌似有点差距打
#include <stdio.h>
#include <string.h>
#include <absacc.h>
#include "stm32f10x_lib.h"
//#define ENABLE_2_CH452 1 // 在2线接口下支持两个CH452芯片并联
/* 延时1uS子程序,主要用于2线接口,与单片机速度有关 */
//#define DELAY_1US {} // MCS51<=10MHz
//#define DELAY_1US {_nop_();} // MCS51<=20MHz
#define DELAY_1US { mDelayuS(1); } // MCS51<=30MHz
/* 2线接口的连接,与实际电路有关 */
//sbit CH452_SCL=P1^7;
//sbit CH452_SDA=P1^6; // 如果使用真正的2线接口,那么SDA接中断引脚P3^3/INT1,用SDA直接做中断输出
//sbit CH452_ADDR=P1^5; // 实际电路应该硬件接GND或者VCC
//sbit CH452_INT=P3^3; // 标准的2线接口使用该引脚输出中断
/* 4线接口的连接,与实际电路有关 */
//sbit CH452_DCLK=P1^7; // 串行数据时钟上升延激活
//sbit CH452_DIN=P1^6; // 串行数据输出,接CH452的数据输入
//sbit CH452_LOAD=P1^5; // 串行命令加载,上升延激活
//sbit CH452_DOUT=P3^3; // INT1,键盘中断和键值数据输入,接CH452的数据输出
/* 2线接口的位操作,与单片机有关 */
#define CH452_SCL_SET {GPIOB->BSRR = GPIO_Pin_6 ;}
#define CH452_SCL_CLR {GPIOB->BRR = GPIO_Pin_6;}
//#define CH452_SCL_D_OUT {} // 设置SCL为输出方向,对于双向I/O需切换为输出
void CH452_SCL_D_OUT( void ){ //PB5
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //Pb1 SDA
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /*推拉输出*/
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
#define CH452_SDA_SET {GPIOB->BSRR = GPIO_Pin_7 ;}
#define CH452_SDA_CLR {GPIOB->BRR = GPIO_Pin_7 ;}
#define CH452_SDA_IN (GPIOB->IDR &0x20) //PB5
void CH452_SDA_D_OUT( void ){//配置GPIO //PB5
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; //Pb5 SDA
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /*推拉输出*/
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
void CH452_SDA_D_IN( void ) { //PB5
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; //Pb5 SDA
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; /*推拉输出*/
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
//#define CH452_SDA_D_OUT {} // 设置SDA为输出方向,对于双向I/O需切换为输出
//#define CH452_SDA_D_IN {CH452_SDA=1;} // 设置SDA为输入方向,对于双向I/O需切换为输入
/* 4线接口的位操作,与单片机有关 */
#define CH452_DCLK_SET {CH452_DCLK=1;}
#define CH452_DCLK_CLR {CH452_DCLK=0;}
#define CH452_DCLK_D_OUT {} // 设置DCLK为输出方向,对于双向I/O需切换为输出
#define CH452_DIN_SET {CH452_DIN=1;}
#define CH452_DIN_CLR {CH452_DIN=0;}
#define CH452_DIN_D_OUT {} // 设置DIN为输出方向,对于双向I/O需切换为输出
#define CH452_LOAD_SET {CH452_LOAD=1;}
#define CH452_LOAD_CLR {CH452_LOAD=0;}
#define CH452_LOAD_D_OUT {} // 设置LOAD为输出方向,对于双向I/O需切换为输出
#define CH452_DOUT_D_IN {CH452_DOUT=1;} // 设置DOUT为输入方向,对于双向I/O需切换为输入
#include <stdio.h>
#include <string.h>
#include <absacc.h>
#include "stm32f10x_lib.h"
//#define ENABLE_2_CH452 1 // 在2线接口下支持两个CH452芯片并联
/* 延时1uS子程序,主要用于2线接口,与单片机速度有关 */
//#define DELAY_1US {} // MCS51<=10MHz
//#define DELAY_1US {_nop_();} // MCS51<=20MHz
#define DELAY_1US { mDelayuS(1); } // MCS51<=30MHz
/* 2线接口的连接,与实际电路有关 */
//sbit CH452_SCL=P1^7;
//sbit CH452_SDA=P1^6; // 如果使用真正的2线接口,那么SDA接中断引脚P3^3/INT1,用SDA直接做中断输出
//sbit CH452_ADDR=P1^5; // 实际电路应该硬件接GND或者VCC
//sbit CH452_INT=P3^3; // 标准的2线接口使用该引脚输出中断
/* 4线接口的连接,与实际电路有关 */
//sbit CH452_DCLK=P1^7; // 串行数据时钟上升延激活
//sbit CH452_DIN=P1^6; // 串行数据输出,接CH452的数据输入
//sbit CH452_LOAD=P1^5; // 串行命令加载,上升延激活
//sbit CH452_DOUT=P3^3; // INT1,键盘中断和键值数据输入,接CH452的数据输出
/* 2线接口的位操作,与单片机有关 */
#define CH452_SCL_SET {GPIOB->BSRR = GPIO_Pin_6 ;}
#define CH452_SCL_CLR {GPIOB->BRR = GPIO_Pin_6;}
//#define CH452_SCL_D_OUT {} // 设置SCL为输出方向,对于双向I/O需切换为输出
void CH452_SCL_D_OUT( void ){ //PB5
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //Pb1 SDA
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /*推拉输出*/
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
#define CH452_SDA_SET {GPIOB->BSRR = GPIO_Pin_7 ;}
#define CH452_SDA_CLR {GPIOB->BRR = GPIO_Pin_7 ;}
#define CH452_SDA_IN (GPIOB->IDR &0x20) //PB5
void CH452_SDA_D_OUT( void ){//配置GPIO //PB5
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; //Pb5 SDA
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /*推拉输出*/
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
void CH452_SDA_D_IN( void ) { //PB5
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; //Pb5 SDA
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; /*推拉输出*/
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
//#define CH452_SDA_D_OUT {} // 设置SDA为输出方向,对于双向I/O需切换为输出
//#define CH452_SDA_D_IN {CH452_SDA=1;} // 设置SDA为输入方向,对于双向I/O需切换为输入
/* 4线接口的位操作,与单片机有关 */
#define CH452_DCLK_SET {CH452_DCLK=1;}
#define CH452_DCLK_CLR {CH452_DCLK=0;}
#define CH452_DCLK_D_OUT {} // 设置DCLK为输出方向,对于双向I/O需切换为输出
#define CH452_DIN_SET {CH452_DIN=1;}
#define CH452_DIN_CLR {CH452_DIN=0;}
#define CH452_DIN_D_OUT {} // 设置DIN为输出方向,对于双向I/O需切换为输出
#define CH452_LOAD_SET {CH452_LOAD=1;}
#define CH452_LOAD_CLR {CH452_LOAD=0;}
#define CH452_LOAD_D_OUT {} // 设置LOAD为输出方向,对于双向I/O需切换为输出
#define CH452_DOUT_D_IN {CH452_DOUT=1;} // 设置DOUT为输入方向,对于双向I/O需切换为输入
你实际测试到底有什么问题,大家没时间来分析你的程序到底有什么问题,再说程序是测试出来的,再好的程序员写出的程序也得根据调试找问题
程序没问题,就是调试的时候本来是当按键的时候点亮一个灯,但是它灯不亮