- 打卡等级:初来乍到
- 打卡总天数:1
- 最近打卡:2024-03-01 08:56:48
新手上路
- 积分
- 49
|
IIC 输出波形上升沿较缓,不知道什么问题,请教大神
程序如下:
void I2C_config(void)
{
I2C_InitTypeDef I2C_InitStructure;
I2C_InitStructure.I2C_Mode = I2C_Mode_Master; //主机模式 Ö÷´ÓÑ¡Ôñ I2C_Mode_Master, I2C_Mode_Slave
I2C_InitStructure.I2C_Enable = ENABLE; //使能IIC I2C¹¦ÄÜʹÄÜ, ENABLE, DISABLE
I2C_InitStructure.I2C_MS_WDTA = DISABLE; //禁止主机自动发送 Ö÷»úʹÄÜ×Ô¶¯·¢ËÍ, ENABLE, DISABLE
I2C_InitStructure.I2C_Speed = 16; // 速度 ÜÏßËÙ¶È=Fosc/2/(Speed*2+4), 0~63
I2C_Init(&I2C_InitStructure);
NVIC_I2C_Init(I2C_Mode_Master,DISABLE,Priority_0); //Ö÷´Óģʽ, I2C_Mode_Master, I2C_Mode_Slave; ÖжÏʹÄÜ, ENABLE/DISABLE; ÓÅÏȼ¶(µÍµ½¸ß) Priority_0,Priority_1,Priority_2,Priority_3
}
//IIC连接P14 P15
void Switch_config(void)
{
I2C_SW(I2C_P14_P15); //I2C_P14_P15,I2C_P24_P25,I2C_P76_P77,I2C_P33_P32
SPI_SW(SPI_P22_P23_P24_P25); //SPI_P54_P13_P14_P15,SPI_P22_P23_P24_P25,SPI_P54_P40_P41_P43,SPI_P35_P34_P33_P32
}
//系统始化时测试显示
void vSystemInit(void)
{
WTST = 0;
EAXFR = 1;
CKCON = 0;
GPIO_config();
Timer_config();
ADC_config();
UART_config();
Exti_config();
Switch_config();
SPI_config();
CMP_config();
//IIC初始化及显示
I2C_config();
TM1640B_set_model(1); //地址自增
TM1640B_display(0x89); //亮度设置
TM1640B_write_data(); //写入测试数据并显示
}
//****************************模式 1/0
void TM1640B_set_model(uint8_t m)
{
if(m)
{
TM1640B_start();
TM1640B_send_byte(0x40); //地址自增
TM1640B_stop();
}
else
{
TM1640B_start();
TM1640B_send_byte(0x44);//固定地址
TM1640B_stop();
}
}
//********************************************************
//********************************************************
//
void TM1640B_display(char k)
{
TM1640B_start();
TM1640B_send_byte(k);
TM1640B_stop();
}
//********************************************************
//********************************************************
//写入显存数据
void TM1640B_write_data()
{
TM1640B_start();
TM1640B_send_byte(0xc0); //发送显存地址
TM1640B_send_byte(num_display[0]); //1
TM1640B_send_byte(num_display[1]);
TM1640B_send_byte(num_display[2]);
TM1640B_send_byte(num_display[3]);
TM1640B_send_byte(num_display[4]);
TM1640B_send_byte(num_display[5]);
TM1640B_send_byte(num_display[6]);
TM1640B_send_byte(num_display[7]); //8
TM1640B_send_byte(num_display[8]);
TM1640B_send_byte(num_display[9]);
TM1640B_send_byte(num_display[10]);
TM1640B_send_byte(num_display[11]);
TM1640B_send_byte(num_display[12]);
TM1640B_send_byte(num_display[13]);
TM1640B_send_byte(num_display[14]);
TM1640B_send_byte(num_display[15]); //16
TM1640B_stop();
TM1640B_display(0x88); //显示开
}
//********************************************************
//********************************************************
void TM1640B_send_byte(char num)
{
// taskENTER_CRITICAL();
SendData(num); //IICÇý¶¯
//taskEXIT_CRITICAL();
}
//********************************************************
//********************************************************
void Start()
{
I2CMSCR = 0x01; //·¢ËÍSTARTÃüÁî
Wait();
}
//********************************************************
void SendData(char dat)
{
I2CTXD = dat; //дÊý¾Ýµ½Êý¾Ý»º³åÇø
I2CMSCR = 0x02; //·¢ËÍSENDÃüÁî
Wait();
}
//********************************************************
//********************************************************
void Stop()
{
I2CMSCR = 0x06; //·¢ËÍSTOPÃüÁî
Wait();
}
//********************************************************
TM1640B驱动时序:
|
|