你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
#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 ;
}
}
评分
查看全部评分