Part Number:MSPM0G3507Other Parts Discussed in Thread:SYSCONFIG,
在SYSCONFIG配置时使用I2C时SCL和SDA引脚都是输入模式,但是如果是controller mode 下应该是输出模式,并且这种情况是默认无法修改的
起因是 我想用I2C与OLED通信,但是无法实现,我发现SPI设置是正常的输出模式。
同时我想请各位大佬帮我看看我的代码对不对,主要是向控制器写命令的函数我不太确定
灰常感谢各位
Ben Qin:
你好,
ty s 说:void Write_IIC_Byte(unsigned char IIC_Byte)
{
DL_I2C_transmitControllerData(I2C1, IIC_Byte);
}void DL_I2C_transmitControllerData(I2C_Regs *i2c, uint8_t data),第二个参数属性应该是uint8_t.
ty s 说:在SYSCONFIG配置时使用I2C时SCL和SDA引脚都是输入模式,但是如果是controller mode 下应该是输出模式,
确实无法修改,但是这里输入输出应该是都可以。
你可以参考下SDK中的例程:mspm0_sdk_1_20_01_06\examples\nortos\LP_MSPM0G3507\driverlib\i2c_controller_rw_multibyte_fifo_interrupts
,
ty s:
您好,非常感谢您的回复,但是我已经检查了所有例程,基本上都是这样的,我发现下方有自定义引脚,里面可以选择invert选项,按照软件的解释应该是输入转输出,但是这依旧无法解决我OLED亮不了的情况,同时非常感谢您对我代码的建议
以下是我的OLED.c文件
#include "oled.h"// the storage format is as follow //[0]0 1 2 3 ... 127 //[1]0 1 2 3 ... 127 //[2]0 1 2 3 ... 127 //[3]0 1 2 3 ... 127 //[4]0 1 2 3 ... 127 //[5]0 1 2 3 ... 127 //[6]0 1 2 3 ... 127 //[7]0 1 2 3 ... 127 /********************************************** //IIC Start **********************************************/ void IIC_Start() {OLED_SCLK_Set();OLED_SDIN_Set();OLED_SDIN_Clr();OLED_SCLK_Clr(); }/********************************************** //IIC Stop **********************************************/ void IIC_Stop() {OLED_SCLK_Set();//OLED_SCLK_Clr();OLED_SDIN_Clr();OLED_SDIN_Set(); }void IIC_Wait_Ack() {OLED_SCLK_Set();OLED_SCLK_Clr(); } /********************************************** // IIC Write byte **********************************************/ void Write_IIC_Byte(uint8_t IIC_Byte) {DL_I2C_transmitControllerData(I2C1, IIC_Byte);//unsigned char i;//unsigned char m, da;// OLED_SCLK_Clr();// for (i = 0; i < 8; i++)// {//m = da;////OLED_SCLK_Clr();//m = m & 0x80;//if (m == 0x80)//{//OLED_SDIN_Set();//}//else//OLED_SDIN_Clr();//da = da << 1;//OLED_SCLK_Set();//delay_us(100);//OLED_SCLK_Clr();// } } /********************************************** // IIC Write Command **********************************************/ void OLED_WR_CMD(unsigned char IIC_Command) {IIC_Start();Write_IIC_Byte(0x78); // Slave address,SA0=0IIC_Wait_Ack();Write_IIC_Byte(0x00); // write commandIIC_Wait_Ack();Write_IIC_Byte(IIC_Command);IIC_Wait_Ack();IIC_Stop(); } /********************************************** // IIC Write Data **********************************************/ void OLED_WR_DATA(unsigned char IIC_Data) {IIC_Start();Write_IIC_Byte(0x78); // D/C#=0; R/W#=0IIC_Wait_Ack();Write_IIC_Byte(0x40); // write dataIIC_Wait_Ack();Write_IIC_Byte(IIC_Data);IIC_Wait_Ack();IIC_Stop(); }uint8_t CMD_Data[] = {0xAE, 0xD5, 0x80, 0xA8, 0x3F, 0xD3, 0x00, 0x40, 0xA1, 0xC8, 0xDA,0x12, 0x81, 0xCF, 0xD9, 0xF1, 0xDB, 0x40, 0xA4, 0xA6, 0x8D, 0x14,0xAF};/*** @function: void OLED_Init(void)* @description: OLED初始化* @return {*}*/ void OLED_Init(void) {delay_ms(200);uint8_t i = 0;for (i = 0; i < 23; i++){OLED_WR_CMD(CMD_Data[i]);} }/*** @function: void OLED_PartClear(void)* @description: 局部清除* @return {*}*/ void OLED_PartClear(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1) {uint8_t x = 0, y = 0;if (y1 % 8 == 0)y = y1 / 8;elsey = y1 / 8 + 1;for (y = y0; y < y1; y++){OLED_Set_Pos(x0, y);for (x = x0; x < x1; x++){OLED_WR_DATA(0);}} }/*** @function: OLED_Clear(void)* @description: 清屏,整个屏幕是黑色的!和没点亮一样!!!* @return {*}*/ void OLED_Clear(void) {uint8_t i, n;for (i = 0; i < 8; i++){OLED_WR_CMD(0xb0 + i); // 设置页地址(0~7)OLED_WR_CMD(0x00);// 设置显示位置—列低地址OLED_WR_CMD(0x10);// 设置显示位置—列高地址for (n = 0; n < 128; n++){OLED_WR_DATA(0);}} }/*** @function: void OLED_Display_On(void)* @description: 开启OLED显示* @return {*}*/ void OLED_Display_On(void) {OLED_WR_CMD(0X8D); // SET DCDC命令OLED_WR_CMD(0X14); // DCDC ONOLED_WR_CMD(0XAF); // DISPLAY ON,打开显示 }/*** @function: void OLED_Display_Off(void)* @description: 关闭OLED显示* @return {*}*/ void OLED_Display_Off(void) {OLED_WR_CMD(0X8D); // SET DCDC命令OLED_WR_CMD(0X10); // DCDC OFFOLED_WR_CMD(0XAE); // DISPLAY OFF,关闭显示 }/*** @function: void OLED_Set_Pos(uint8_t x, uint8_t y)* @description: 坐标设置* @param {uint8_t} x,y* @return {*}*/ void OLED_Set_Pos(uint8_t x, uint8_t y) {OLED_WR_CMD(0xb0 + y);// 设置页地址(0~7)OLED_WR_CMD(((x & 0xf0) >> 4) | 0x10); // 设置显示位置—列高地址OLED_WR_CMD(x & 0x0f);// 设置显示位置—列低地址 }/*** @function: unsigned int oled_pow(uint8_t m,uint8_t n)* @description: m^n函数* @param {uint8_t} m,n* @return {unsigned int} result*/ unsigned int oled_pow(uint8_t m, uint8_t n) {unsigned int result = 1;while (n--)result *= m;return result; }/*** @function: void OLED_ShowChar(uint8_t x, uint8_t y, uint8_t chr, uint8_t Char_Size,uint8_t Color_Turn)* @description: 在OLED12864特定位置开始显示一个字符* @param {uint8_t} x字符开始显示的横坐标* @param {uint8_t} y字符开始显示的纵坐标* @param {uint8_t} chr待显示的字符* @param {uint8_t} Char_Size待显示字符的字体大小,选择字体 16/12* @param {uint8_t} Color_Turn是否反相显示(1反相、0不反相)* @return {*}*/ void OLED_ShowChar(uint8_t x, uint8_t y, uint8_t chr, uint8_t Char_Size, uint8_t Color_Turn) {unsigned char c = 0, i = 0;c = chr - ' '; // 得到偏移后的值if (x > 128 - 1){x = 0;y = y + 2;}if (Char_Size == 16){OLED_Set_Pos(x, y);for (i = 0; i < 8; i++){if (Color_Turn)OLED_WR_DATA(~F8X16[c * 16 + i]);elseOLED_WR_DATA(F8X16[c * 16 + i]);}OLED_Set_Pos(x, y + 1);for (i = 0; i < 8; i++){if (Color_Turn)OLED_WR_DATA(~F8X16[c * 16 + i + 8]);elseOLED_WR_DATA(F8X16[c * 16 + i + 8]);}}else{OLED_Set_Pos(x, y);for (i = 0; i < 6; i++){if (Color_Turn)OLED_WR_DATA(~F6x8[c][i]);elseOLED_WR_DATA(F6x8[c][i]);}} }/*** @function: void OLED_ShowString(uint8_t x, uint8_t y, uint8_t *chr, uint8_tChar_Size, uint8_t Color_Turn)* @description: 在OLED12864特定位置开始显示字符串* @param {uint8_t} x待显示字符串的开始横坐标x:0~127* @param {uint8_t} y待显示字符串的开始纵坐标 y:0~7,若选择字体大小为16,则两行数字之间需要间隔2,若选择字体大小为12,间隔1* @param {uint8_t} *chr待显示的字符串* @param {uint8_t} Char_Size待显示字符串的字体大小,选择字体 16/12,16为8X16,12为6x8* @param {uint8_t} Color_Turn是否反相显示(1反相、0不反相)* @return {*}*/ void OLED_ShowString(uint8_t x, uint8_t y, char *chr, uint8_t Char_Size, uint8_t Color_Turn) {uint8_t j = 0;while (chr[j] != '\0'){OLED_ShowChar(x, y, chr[j], Char_Size, Color_Turn);if (Char_Size == 12) // 6X8的字体列加6,显示下一个字符x += 6;else // 8X16的字体列加8,显示下一个字符x += 8;if (x > 122 && Char_Size == 12) // TextSize6x8如果一行不够显示了,从下一行继续显示{x = 0;y++;}if (x > 120 && Char_Size == 16) // TextSize8x16如果一行不够显示了,从下一行继续显示{x = 0;y++;}j++;} }/*** @function: void OLED_ShowNum(uint8_t x,uint8_t y,unsigned int num,uint8_t len,uint8_t size2, Color_Turn)* @description: 显示数字* @param {uint8_t} x待显示的数字起始横坐标,x:0~126* @param {uint8_t} y待显示的数字起始纵坐标, y:0~7,若选择字体大小为16,则两行数字之间需要间隔2,若选择字体大小为12,间隔1* @param {unsigned int} num:输入的数据* @param {uint8_t } len:输入的数据位数* @param {uint8_t} size2:输入的数据大小,选择 16/12,16为8X16,12为6x8* @param {uint8_t} Color_Turn是否反相显示(1反相、0不反相)* @return {*}*/ void OLED_ShowNum(uint8_t x, uint8_t y, unsigned int num, uint8_t len, uint8_t size2, uint8_t Color_Turn) {uint8_t t, temp;uint8_t enshow = 0;for (t = 0; t < len; t++){temp = (num / oled_pow(10, len - t - 1)) % 10;if (enshow == 0 && t < (len - 1)){if (temp == 0){OLED_ShowChar(x + (size2 / 2) * t, y, ' ', size2, Color_Turn);continue;}elseenshow = 1;}OLED_ShowChar(x + (size2 / 2) * t, y, temp + '0', size2, Color_Turn);} }/*** @function: void OLED_Showdecimal(uint8_t x,uint8_t y,float num,uint8_t z_len,uint8_t f_len,uint8_t size2, uint8_t Color_Turn)* @description: 显示正负浮点数* @param {uint8_t} x待显示的数字起始横坐标,x:0~126* @param {uint8_t} y待显示的数字起始纵坐标, y:0~7,若选择字体大小为16,则两行数字之间需要间隔2,若选择字体大小为12,间隔1* @param {float} num:输入的浮点型数据* @param {uint8_t } z_ len:整数部分的位数* @param {uint8_t } f_len: 小数部分的位数* @param {uint8_t} size2:输入的数据大小,选择 16/12,16为8X16,12为6x8* @param {uint8_t} Color_Turn是否反相显示(1反相、0不反相)* @return {*}*/ void OLED_Showdecimal(uint8_t x, uint8_t y, float num, uint8_t z_len, uint8_t f_len, uint8_t size2, uint8_t Color_Turn) {uint8_t t, temp, i = 0; // i为负数标志位uint8_t enshow;int z_temp, f_temp;if (num < 0){z_len += 1;i = 1;num = -num;}z_temp = (int)num;// 整数部分for (t = 0; t < z_len; t++){temp = (z_temp / oled_pow(10, z_len - t - 1)) % 10;if (enshow == 0 && t < (z_len - 1)){if (temp == 0){OLED_ShowChar(x + (size2 / 2) * t, y, ' ', size2, Color_Turn);continue;}elseenshow = 1;}OLED_ShowChar(x + (size2 / 2) * t, y, temp + '0', size2, Color_Turn);}// 小数点OLED_ShowChar(x + (size2 / 2) * (z_len), y, '.', size2, Color_Turn);f_temp = (int)((num - z_temp) * (oled_pow(10, f_len)));// 小数部分for (t = 0; t < f_len; t++){temp = (f_temp / oled_pow(10, f_len - t - 1)) % 10;OLED_ShowChar(x + (size2 / 2) * (t + z_len) + 5, y, temp + '0', size2, Color_Turn);}if (i == 1) // 如果为负,就将最前的一位赋值‘-’{OLED_ShowChar(x, y, '-', size2, Color_Turn);i = 0;} }/*** @function: void OLED_ShowCHinese(uint8_t x,uint8_t y,uint8_t no, uint8_t Color_Turn)* @description: 在OLED特定位置开始显示16X16汉字* @param {uint8_t} x待显示的汉字起始横坐标x: 0~112,两列汉字之间需要间隔16* @param {uint8_t} y待显示的汉字起始纵坐标 y: 0~6 , 两行汉字之间需要间隔2* @param {uint8_t} no待显示的汉字编号* @param {uint8_t} Color_Turn是否反相显示(1反相、0不反相)* @return {*}*/ void OLED_ShowCHinese(uint8_t x, uint8_t y, uint8_t no, uint8_t Color_Turn) {uint8_t t = 0;OLED_Set_Pos(x, y);for (t = 0; t < 16; t++){if (Color_Turn)OLED_WR_DATA(~Hzk[2 * no][t]); // 显示汉字的上半部分elseOLED_WR_DATA(Hzk[2 * no][t]); // 显示汉字的上半部分}OLED_Set_Pos(x, y + 1);for (t = 0; t < 16; t++){if (Color_Turn)OLED_WR_DATA(~Hzk[2 * no + 1][t]); // 显示汉字的上半部分elseOLED_WR_DATA(Hzk[2 * no + 1][t]); // 显示汉字的上半部分} }/*** @function: void OLED_DrawBMP(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, uint8_t *BMP,uint8_t Color_Turn)* @description: 在OLED特定区域显示BMP图片* @param {uint8_t} x0图像开始显示横坐标x0:0~127* @param {uint8_t} y0图像开始显示纵坐标y0:0~7* @param {uint8_t} x1图像结束显示横坐标x1:1~128* @param {uint8_t} y1图像结束显示纵坐标y1:1~8* @param {uint8_t} *BMP待显示的图像数据* @param {uint8_t} Color_Turn是否反相显示(1反相、0不反相)* @return {*}*/ void OLED_DrawBMP(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, uint8_t *BMP, uint8_t Color_Turn) {uint32_t j = 0;uint8_t x = 0, y = 0;if (y1 % 8 == 0)y = y1 / 8;elsey = y1 / 8 + 1;for (y = y0; y < y1; y++){OLED_Set_Pos(x0, y);for (x = x0; x < x1; x++){if (Color_Turn)OLED_WR_DATA(~BMP[j++]); // 显示反相图片elseOLED_WR_DATA(BMP[j++]); // 显示图片}} }/*** @function: void OLED_HorizontalShift(uint8_t direction)* @description: 屏幕内容水平全屏滚动播放* @param {uint8_t} directionLEFT0x27RIGHT0x26* @return {*}*/ void OLED_HorizontalShift(uint8_t direction){OLED_WR_CMD(0x2e);// 停止滚动OLED_WR_CMD(direction); // 设置滚动方向OLED_WR_CMD(0x00);// 虚拟字节设置,默认为0x00OLED_WR_CMD(0x00);// 设置开始页地址OLED_WR_CMD(0x07);// 设置每个滚动步骤之间的时间间隔的帧频//0x00-5帧, 0x01-64帧, 0x02-128帧, 0x03-256帧, 0x04-3帧, 0x05-4帧, 0x06-25帧, 0x07-2帧,OLED_WR_CMD(0x07); // 设置结束页地址OLED_WR_CMD(0x00); // 虚拟字节设置,默认为0x00OLED_WR_CMD(0xff); // 虚拟字节设置,默认为0xffOLED_WR_CMD(0x2f); // 开启滚动-0x2f,禁用滚动-0x2e,禁用需要重写数据 }/*** @function: void OLED_Some_HorizontalShift(uint8_t direction,uint8_t start,uint8_t end)* @description: 屏幕部分内容水平滚动播放* @param {uint8_t} directionLEFT0x27RIGHT0x26* @param {uint8_t} start 开始页地址0x00~0x07* @param {uint8_t} end结束页地址0x01~0x07* @return {*}*/ void OLED_Some_HorizontalShift(uint8_t direction, uint8_t start, uint8_t end) {OLED_WR_CMD(0x2e);// 停止滚动OLED_WR_CMD(direction); // 设置滚动方向OLED_WR_CMD(0x00);// 虚拟字节设置,默认为0x00OLED_WR_CMD(start);// 设置开始页地址OLED_WR_CMD(0x07);// 设置每个滚动步骤之间的时间间隔的帧频,0x07即滚动速度2帧OLED_WR_CMD(end);// 设置结束页地址OLED_WR_CMD(0x00);// 虚拟字节设置,默认为0x00OLED_WR_CMD(0xff);// 虚拟字节设置,默认为0xffOLED_WR_CMD(0x2f);// 开启滚动-0x2f,禁用滚动-0x2e,禁用需要重写数据 }/*** @function: void OLED_VerticalAndHorizontalShift(uint8_t direction)* @description: 屏幕内容垂直水平全屏滚动播放* @param {uint8_t} direction右上滚动0x29*左上滚动0x2A* @return {*}*/ void OLED_VerticalAndHorizontalShift(uint8_t direction) {OLED_WR_CMD(0x2e);// 停止滚动OLED_WR_CMD(direction); // 设置滚动方向OLED_WR_CMD(0x01);// 虚拟字节设置OLED_WR_CMD(0x00);// 设置开始页地址OLED_WR_CMD(0x07);// 设置每个滚动步骤之间的时间间隔的帧频,即滚动速度OLED_WR_CMD(0x07);// 设置结束页地址OLED_WR_CMD(0x01);// 垂直滚动偏移量OLED_WR_CMD(0x00);// 虚拟字节设置,默认为0x00OLED_WR_CMD(0xff);// 虚拟字节设置,默认为0xffOLED_WR_CMD(0x2f);// 开启滚动-0x2f,禁用滚动-0x2e,禁用需要重写数据 }/*** @function: void OLED_DisplayMode(uint8_t mode)* @description: 屏幕内容取反显示* @param {uint8_t} directionON 0xA7,*OFF 0xA6 默认此模式,设置像素点亮* @return {*}*/ void OLED_DisplayMode(uint8_t mode) {OLED_WR_CMD(mode); }/*** @function: void OLED_IntensityControl(uint8_t intensity)* @description: 屏幕亮度调节* @param{uint8_t} intensity 0x00~0xFF,RESET=0x7F* @return {*}*/ void OLED_IntensityControl(uint8_t intensity) {OLED_WR_CMD(0x81);OLED_WR_CMD(intensity); }这是我的oled.h
#ifndef __OLED_H #define __OLED_H#include <ti_msp_dl_config.h> #include "delay.h" #include "oledfont.h"#define OLED_MODE 0 #define SIZE 8 #define XLevelL 0x00 #define XLevelH 0x10 #define Max_Column 128 #define Max_Row 64 #define Brightness 0xFF #define X_WIDTH 128 #define Y_WIDTH 64#define OLED_SCLK_Clr() DL_GPIO_clearPins(GPIO_I2C_SCL_PORT, GPIO_I2C_SCL_PIN) // CLK #define OLED_SCLK_Set() DL_GPIO_setPins(GPIO_I2C_SCL_PORT, GPIO_I2C_SCL_PIN)#define OLED_SDIN_Clr() DL_GPIO_clearPins(GPIO_I2C_SDA_PORT, GPIO_I2C_SDA_PIN) // DIN #define OLED_SDIN_Set() DL_GPIO_setPins(GPIO_I2C_SDA_PORT, GPIO_I2C_SDA_PIN)#define OLED_CMD 0 #define OLED_DATA 1// Functions to control OLED are as follows void OLED_WR_CMD(uint8_t cmd); void OLED_WR_DATA(uint8_t data); void write_IIC_Byte(unsigned char IIC_Byte); void OLED_Init(void); void OLED_Clear(void); void OLED_Display_On(void); void OLED_Display_Off(void); void OLED_Set_Pos(uint8_t x, uint8_t y); void OLED_PartClear(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1); void OLED_ShowNum(uint8_t x, uint8_t y, unsigned int num, uint8_t len, uint8_t size2, uint8_t Color_Turn); void OLED_Showdecimal(uint8_t x, uint8_t y, float num, uint8_t z_len, uint8_t f_len, uint8_t size2, uint8_t Color_Turn); void OLED_ShowChar(uint8_t x, uint8_t y, uint8_t chr, uint8_t Char_Size, uint8_t Color_Turn); void OLED_ShowString(uint8_t x, uint8_t y, char *chr, uint8_t Char_Size, uint8_t Color_Turn); void OLED_ShowCHinese(uint8_t x, uint8_t y, uint8_t no, uint8_t Color_Turn); void OLED_DrawBMP(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, uint8_t *BMP, uint8_t Color_Turn); void OLED_HorizontalShift(uint8_t direction); void OLED_Some_HorizontalShift(uint8_t direction, uint8_t start, uint8_t end); void OLED_VerticalAndHorizontalShift(uint8_t direction); void OLED_DisplayMode(uint8_t mode); void OLED_IntensityControl(uint8_t intensity);#endif
,
Ben Qin:
你这里I2C是否能正常的收发信号?引脚上是否有电平?请确认下是I2C的问题还是OLED的问题。
,
ty s:
感谢您的建议,我尝试使用模拟IO与OLED通信,但是还是不行
void IIC_Start() {delay_us(1);OLED_SCLK_Set();delay_us(1);OLED_SDIN_Set();delay_us(1);OLED_SDIN_Clr(); }/********************************************** //IIC Stop **********************************************/ void IIC_Stop() {delay_us(1);OLED_SCLK_Set();delay_us(1);OLED_SDIN_Clr();delay_us(1);OLED_SDIN_Set(); }void IIC_Wait_Ack() {delay_us(1);OLED_SCLK_Set();delay_us(1);OLED_SCLK_Clr(); } /********************************************** // IIC Write byte **********************************************/ void Write_IIC_Byte(uint8_t IIC_Byte) {uint8_t i;uint8_t m, da;da = IIC_Byte;OLED_SCLK_Clr();delay_us(1);for (i = 0; i < 8; i++){m = da;m = m & 0x80;if (m == 0x80){OLED_SDIN_Set();}elseOLED_SDIN_Clr();da = da << 1;delay_us(1);OLED_SCLK_Set();delay_us(1);OLED_SCLK_Clr();delay_us(1);} }这是我的配置文件
/*** These arguments were used when this file was generated. They will be automatically applied on subsequent loads* via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments.* @cliArgs --device "MSPM0G350X" --package "LQFP-64(PM)" --part "Default" --product "mspm0_sdk@1.20.01.06"* @versions {"tool":"1.18.0+3266"}*//*** Import the modules used in this configuration.*/ const GPIO= scripting.addModule("/ti/driverlib/GPIO", {}, false); const GPIO1 = GPIO.addInstance(); const GPIO2 = GPIO.addInstance();/*** Write custom configuration values to the imported modules.*/ GPIO1.$name= "LED"; GPIO1.associatedPins.create(2); GPIO1.associatedPins[0].assignedPin= "26"; GPIO1.associatedPins[0].ioStructure= "SD"; GPIO1.associatedPins[0].$name= "RED"; GPIO1.associatedPins[0].assignedPort = "PORTB"; GPIO1.associatedPins[1].assignedPin= "27"; GPIO1.associatedPins[1].ioStructure= "SD"; GPIO1.associatedPins[1].$name= "GREEN"; GPIO1.associatedPins[1].assignedPort = "PORTB";const Board= scripting.addModule("/ti/driverlib/Board", {}, false); Board.peripheral.$assign= "DEBUGSS"; Board.peripheral.swclkPin.$assign = "PA20"; Board.peripheral.swdioPin.$assign = "PA19";GPIO2.$name= "GPIO_I2C"; GPIO2.associatedPins.create(2); GPIO2.associatedPins[0].$name= "SCL"; GPIO2.associatedPins[0].ioStructure= "SD"; GPIO2.associatedPins[0].initialValue= "SET"; GPIO2.associatedPins[0].internalResistor = "PULL_UP"; GPIO2.associatedPins[0].pin.$assign= "PB7"; GPIO2.associatedPins[1].$name= "SDA"; GPIO2.associatedPins[1].internalResistor = "PULL_UP"; GPIO2.associatedPins[1].ioStructure= "SD"; GPIO2.associatedPins[1].initialValue= "SET"; GPIO2.associatedPins[1].pin.$assign= "PB6";const SYSCTL= scripting.addModule("/ti/driverlib/SYSCTL", {}, false); SYSCTL.forceDefaultClkConfig = true; SYSCTL.clockTreeEn= true;/*** Pinmux solution for unlocked pins/peripherals. This ensures that minor changes to the automatic solver in a future* version of the tool will not impact the pinmux you originally saw.These lines can be completely deleted in order to* re-solve from scratch.*/ GPIO1.associatedPins[0].pin.$suggestSolution = "PB26"; GPIO1.associatedPins[1].pin.$suggestSolution = "PB27";我加入了内置的上拉电阻,但是OLED依旧没有反应,但是我的OLED在其他设备上是可以正常使用的,我将系统板上的LED与I2C的两条线相连,灯在闪烁至少显示引脚通信是没有问题的,也非常感谢您的耐心帮助
,
Ben Qin:
那么I2C其实是没问题的,也许有可能是驱动不了你的OLED吧,你可以多尝试几个板子看看