1.SPI 8位 数据传输
这边以只作为主机发送为例,需要SPI_MOSI、SPI_SCK、SPI_CS Cube配置如下:
图中将SPI_CS 引脚设置为普通IO口便于直接控制。
要发送数据的话直接调用以下代码。
unsigned char op_code = 0xcf;
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_RESET);
HAL_SPI_Transmit(&hspi2,op_code,1,10);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_SET);
2.SPI 16位 数据传输
Cube配置如下:
配置基本跟如上一致,只是位数改成了16位,调用发送函数的话。
uint16_t op_code[1] = {0xcfff};
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_RESET);
HAL_SPI_Transmit(&hspi2,(uint8_t *)op_code,1,10);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_SET);
3. 16位数据传输的另一种方法
配置的话跟上面8位方式配置一样 ,然后以数组形式发送两位数据,代码如下:
unsigned char op_code[2] = {0xcf,0xff};
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_RESET);
HAL_SPI_Transmit(&hspi2,op_code,2,10);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_SET);
以下方法是错误的,作者有亲自测试过。
unsigned int op_code = 0xcfff;
unsigned char a,b;
a = op_code >> 8;
b = op_code & 0xff;
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_RESET);
HAL_SPI_Transmit(&hspi2,&a,1,0);
HAL_SPI_Transmit(&hspi2,&b,1,0);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_SET);