OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8285|回复: 2

SPI驱动多个74HC595扩展IO

[复制链接]

21

主题

294

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1867
金钱
1867
注册时间
2013-7-29
在线时间
285 小时
发表于 2021-10-19 08:58:30 | 显示全部楼层 |阅读模式
void SPI1_Init(void)
{
     RCC->APB2ENR|=1<<2;       //PORTA时钟使能
     RCC->APB2ENR|=1<<12;      //SPI1时钟使能
     RCC->APB2ENR|=1<<0 ;      //复用功能时钟使能

     //这里只针对SPI口初始化
     GPIOA->CRL&=0X0F00FFFF;
     GPIOA->CRL|=0XB0B30000;    //PA5.6.7复用
     GPIOA->ODR|=0XF0;          //PA5.6.7下拉

     SPI1->CR1|=0<<10;//全双工模式
     SPI1->CR1|=1<<9; //软件nss管理
     SPI1->CR1|=1<<8;

     SPI1->CR1|=1<<2;       //SPI主机
     SPI1->CR1|=0<<11;      //8bit数据格式
     SPI2->CR1|=0<<1;                     //空闲模式下SCK为1 CPOL=1
            SPI2->CR1|=0<<0;                     //数据采样从第二个时间边沿开始,CPHA=1
     SPI1->CR1|=7<<3;       //Fsck=Fcpu/256
     SPI1->CR1|=0<<7;       //MSBfirst
     SPI1->CR1|=1<<6;       //SPI设备使能
}
void SPI1_ReadWriteByte(u8 TxData)
{
     while((SPI1->SR&(1<<1))==0);
     SPI1->DR=TxData;                   //发送一个byte
     while((SPI1->SR&(1<<0))==0);
}

void HC595_Send_Multi_Byte(u8 data[],u8 lenth)
{
     u8 i;

     for(i=0;i<lenth;i++)
     {
         SPI1_ReadWriteByte(data[i]);
     }
     SPI1_CS_select();
     delay_us(5);
     SPI1_CS_unselect();
     delay_us(5);
}

回复

使用道具 举报

6

主题

888

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1483
金钱
1483
注册时间
2020-8-19
在线时间
337 小时
发表于 2021-10-19 09:40:43 | 显示全部楼层
感谢分享
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2022-6-30
在线时间
2 小时
发表于 2022-7-11 13:46:17 | 显示全部楼层
感谢作者分享

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /1 下一条

正点原子公众号

如发现本坛存在违规或侵权内容, 请点击这里发送邮件举报 (或致电020-38271790)。请提供侵权说明和联系方式。我们将及时审核依法处理,感谢配合。

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2026-4-3 19:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表