中级会员
 
- 积分
- 385
- 金钱
- 385
- 注册时间
- 2013-11-27
- 在线时间
- 51 小时
|
发表于 2025-3-7 11:32:52
|
显示全部楼层
#include "mbi5020.h"
#define HI 1
#define LOW 0
#define MBI5020_R_SetOE(x) HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,(GPIO_PinState)(x));/*PA1 右转向OE*/
#define MBI5020_R_SetLE(x) HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,(GPIO_PinState)(x));/*PA2 右转向LE*/
#define MBI5020_R_SetSDI(x) HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,(GPIO_PinState)(x));/*PA3 右转向SDI*/
#define MBI5020_R_SetCLK(x) HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,(GPIO_PinState)(x));/*PA4 右转向CLK*/
#define MBI5020_L_SetOE(x) HAL_GPIO_WritePin(GPIOA,GPIO_PIN_6,(GPIO_PinState)(x));/*PA6 左转向OE*/
#define MBI5020_L_SetLE(x) HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,(GPIO_PinState)(x));/*PA5 左转向LE*/
#define MBI5020_L_SetSDI(x) HAL_GPIO_WritePin(GPIOF,GPIO_PIN_0,(GPIO_PinState)(x));/*PF0 左转向SDI*/
#define MBI5020_L_SetCLK(x) HAL_GPIO_WritePin(GPIOF,GPIO_PIN_1,(GPIO_PinState)(x));/*PF1 左转向CLK*/
void MBI5020_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
__HAL_RCC_GPIOA_CLK_ENABLE(); /* GPIOA时钟使能 */
__HAL_RCC_GPIOF_CLK_ENABLE(); /* GPIOF时钟使能 */
GPIO_InitStruct.Pin = GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; /* 推挽 */
GPIO_InitStruct.Pull = GPIO_PULLUP; /* 使能上拉 */
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM; /* GPIO速度 */
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /* GPIO初始化 */
/*初始化F口输出*/
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; /* 推挽 */
GPIO_InitStruct.Pull = GPIO_PULLUP; /* 使能上拉 */
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM; /* GPIO速度 */
HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); /* GPIO初始化 */
}
void MBI5020_OutPut(uint8_t ucSide,uint16_t usCode)
{
unsigned char i=0;
if(ucSide) /*右*/
{
MBI5020_R_SetOE(HI); /*输出关闭*/
MBI5020_R_SetLE(LOW);/*数据栓锁*/
MBI5020_R_SetCLK(LOW);
for(i=0; i<16; i++)
{
if(usCode & 0x8000)
{
MBI5020_R_SetSDI(HI);
}
else
{
MBI5020_R_SetSDI(LOW);
}
MBI5020_R_SetCLK(HI);/*CLK上升沿,读取输入*/
usCode = usCode<<1;
MBI5020_R_SetCLK(LOW);
}
MBI5020_R_SetLE(HI); /*数据传入输出栓锁器*/
MBI5020_R_SetLE(LOW); /*数据栓锁*/
MBI5020_R_SetOE(LOW); /*输出开启*/
}
else
{
MBI5020_L_SetOE(HI); /*输出关闭*/
MBI5020_L_SetLE(LOW);/*数据栓锁*/
MBI5020_L_SetCLK(LOW);
for(i=0; i<16; i++)
{
if(usCode & 0x8000)
{
MBI5020_L_SetSDI(HI);
}
else
{
MBI5020_L_SetSDI(LOW);
}
MBI5020_L_SetCLK(HI);
usCode = usCode<<1;
MBI5020_L_SetCLK(LOW);
}
MBI5020_L_SetLE(HI);
MBI5020_L_SetLE(LOW);
MBI5020_L_SetOE(LOW);
}
}
完整的代码,我这里是有左右两个,你选一个就行了。 |
|