你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
技术帖
话题
资源
创客秀
视频
标签
积分商城
每日签到
stm32读取两片74hc165d数据,总是读不对,求指教?
[复制链接]
月霜寒
提问时间:2017-3-17 09:16 /
阅读主题, 点击返回1楼
赞
0
收藏
3
评论
21
分享
发布时间:2017-3-17 09:16
请先
登录
后回复
21个回答
月霜寒
回答时间:2017-4-5 16:34:11
a0a.1 32b0c
没问题,我的程序可以了,只是我设置上的问题
赞
0
评论
回复
支持
反对
月霜寒
回答时间:2017-4-5 16:34:38
a0a.1 32b0c
#include "74HC165D.h"
#include "delay.h"
#include "485test.h"
unsigned int ADDR_SW_Data,HC=0;
void ADDR_SW_Init(void)//74HC165D各引脚初始化
{
GPIO_InitTypeDef ADDR_SW_GPIO_InitStructure;
/* GPIOD Periph clock enable */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //
/* Configure zoom and focus pins in output pushpull mode */
ADDR_SW_GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2;//0:clock;1
L;2:clock_en
GPIO_SetBits(GPIOC, GPIO_Pin_0);//clock
GPIO_SetBits(GPIOC, GPIO_Pin_1);//PL
GPIO_SetBits(GPIOC, GPIO_Pin_2);//clock_en
ADDR_SW_GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
ADDR_SW_GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_Init(GPIOC, &ADDR_SW_GPIO_InitStructure);
/* Configure SPI1 pins: MISO and MOSI */
ADDR_SW_GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;//DATA_OUT
ADDR_SW_GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
GPIO_Init(GPIOC, &ADDR_SW_GPIO_InitStructure);
}
void read_ADDR_SW(void)//读取74HC165D函数值
{
unsigned char i;
ADDR_SW_Data = 0;
GPIO_ResetBits(GPIOC, GPIO_Pin_2);//clock_en //打开165选通端
GPIO_ResetBits(GPIOC, GPIO_Pin_1); //运行数据计入165
delay_ms(1);
GPIO_SetBits(GPIOC, GPIO_Pin_1); //允许数据移位
for(i=0;i<16;i++) //读16次数据
{
GPIO_ResetBits(GPIOC, GPIO_Pin_0);
delay_ms(1);
ADDR_SW_Data = GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_3) | (ADDR_SW_Data<<1);
GPIO_SetBits(GPIOC, GPIO_Pin_0);
delay_ms(1);
}
GPIO_SetBits(GPIOC, GPIO_Pin_2); //关闭165选通端
GPIO_ResetBits(GPIOC, GPIO_Pin_1); //运行数据计入165
ADDR_SW_Data = ~ADDR_SW_Data; //拨码开关取反
//PT_currentaddr = ADDR_SW_Data & 0x00ff; //拨码开关低8位为地址
switch((ADDR_SW_Data >> 8) & 0x0003) //拨码开关高8位为波特率设置,低2位为波特率设置位
{
case 0x0000 :
{
//current_BautRate = 2400;
USART_SendData(USART1, 1);
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//检测发送状态寄存器
break ;
}
case 0x0001 :
{
//current_BautRate = 4800;
USART_SendData(USART1, 2);
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//检测发送状态寄存器
break ;
}
case 0x0002 :
{
//current_BautRate = 9600;
USART_SendData(USART1,3);
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//检测发送状态寄存器
break ;
}
case 0x0003 :
{
//current_BautRate = 19200;
USART_SendData(USART1, 4);
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//检测发送状态寄存器
break ;
}
default :
//current_BautRate = 2400;
{USART_SendData(USART1, 1);
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//检测发送状态寄存器
}
break ;
}
}
赞
0
评论
回复
支持
反对
zbber
回答时间:2017-4-5 17:02:07
a0a.1 32b0c
检测口试试使用GPIO_Mode_IPU上拉输入,不要用浮空
赞
0
评论
回复
支持
反对
asmhai
回答时间:2017-4-6 22:42:39
a0a.1 32b0c
74HC165,我用来做按键,接了三个74HC165,还有LED共用,
评分
参与人数
1
ST金币
+2
收起
理由
zero99
+ 2
查看全部评分
赞
0
评论
回复
支持
反对
asmhai
回答时间:2017-4-6 22:43:34
a0a.1 32b0c
项目有点相同。74HC165用处多多。
赞
0
评论
回复
支持
反对
月霜寒
回答时间:2017-4-7 08:33:46
a0a.1 32b0c
对啊,使用74HC165节省IO
赞
0
评论
回复
支持
反对
1
2
/ 2 页
所属标签
相似问题
关于
意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
#include "delay.h"
#include "485test.h"
unsigned int ADDR_SW_Data,HC=0;
void ADDR_SW_Init(void)//74HC165D各引脚初始化
{
GPIO_InitTypeDef ADDR_SW_GPIO_InitStructure;
/* GPIOD Periph clock enable */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //
/* Configure zoom and focus pins in output pushpull mode */
ADDR_SW_GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2;//0:clock;1
GPIO_SetBits(GPIOC, GPIO_Pin_0);//clock
GPIO_SetBits(GPIOC, GPIO_Pin_1);//PL
GPIO_SetBits(GPIOC, GPIO_Pin_2);//clock_en
ADDR_SW_GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
ADDR_SW_GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_Init(GPIOC, &ADDR_SW_GPIO_InitStructure);
/* Configure SPI1 pins: MISO and MOSI */
ADDR_SW_GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;//DATA_OUT
ADDR_SW_GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
GPIO_Init(GPIOC, &ADDR_SW_GPIO_InitStructure);
}
void read_ADDR_SW(void)//读取74HC165D函数值
{
unsigned char i;
ADDR_SW_Data = 0;
GPIO_ResetBits(GPIOC, GPIO_Pin_2);//clock_en //打开165选通端
GPIO_ResetBits(GPIOC, GPIO_Pin_1); //运行数据计入165
delay_ms(1);
GPIO_SetBits(GPIOC, GPIO_Pin_1); //允许数据移位
for(i=0;i<16;i++) //读16次数据
{
GPIO_ResetBits(GPIOC, GPIO_Pin_0);
delay_ms(1);
ADDR_SW_Data = GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_3) | (ADDR_SW_Data<<1);
GPIO_SetBits(GPIOC, GPIO_Pin_0);
delay_ms(1);
}
GPIO_SetBits(GPIOC, GPIO_Pin_2); //关闭165选通端
GPIO_ResetBits(GPIOC, GPIO_Pin_1); //运行数据计入165
ADDR_SW_Data = ~ADDR_SW_Data; //拨码开关取反
//PT_currentaddr = ADDR_SW_Data & 0x00ff; //拨码开关低8位为地址
switch((ADDR_SW_Data >> 8) & 0x0003) //拨码开关高8位为波特率设置,低2位为波特率设置位
{
case 0x0000 :
{
//current_BautRate = 2400;
USART_SendData(USART1, 1);
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//检测发送状态寄存器
break ;
}
case 0x0001 :
{
//current_BautRate = 4800;
USART_SendData(USART1, 2);
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//检测发送状态寄存器
break ;
}
case 0x0002 :
{
//current_BautRate = 9600;
USART_SendData(USART1,3);
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//检测发送状态寄存器
break ;
}
case 0x0003 :
{
//current_BautRate = 19200;
USART_SendData(USART1, 4);
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//检测发送状态寄存器
break ;
}
default :
//current_BautRate = 2400;
{USART_SendData(USART1, 1);
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//检测发送状态寄存器
}
break ;
}
}
评分
查看全部评分