野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12394|回复: 5

STM32F控制74HC165疑问

[复制链接]
发表于 2016-4-4 23:22:53 | 显示全部楼层 |阅读模式
STM32F103控制74HC165(SPI),本来应该是很简单的程序。但是我死活调不出来。  
         74HC165是5V供电。
         STM32  3.3V
1.png
2.png
74HC165原理图.png
回复

使用道具 举报

发表于 2016-4-5 08:48:41 | 显示全部楼层
看看是不是引脚被板子其它芯片用了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-5 09:45:45 | 显示全部楼层
flyleaf 发表于 2016-4-5 08:48
看看是不是引脚被板子其它芯片用了

您说的是哪个引脚?
回复 支持 反对

使用道具 举报

发表于 2016-4-5 10:14:39 | 显示全部楼层
本帖最后由 wqy_1000 于 2016-4-5 10:48 编辑

  1.    
  2. /*msp430f149            hc165  
  3. p23       --->         第一个165的DS位  
  4. p24       --->         4个165的P/L位  
  5. P25       --->          4个165的CLK  
  6. P26       --->         4个165的CE  
  7. p27       --->         第四个165的Q7位   */  
  8. #include <msp430x14x.h>   
  9.   
  10. #define DSINPUT() (P2OUT |= BIT3)   
  11. #define CP_SET()  (P2OUT |= BIT5)               //时钟高电平;   
  12. #define CP_CLR()  (P2OUT &= ~BIT5)                 
  13. #define PL_SET()  (P2OUT |= BIT4)               //串行移位控制;   
  14. #define PL_CLR()  (P2OUT &= ~BIT4)              //并行读入寄存器   
  15. //#define CE_SET()  (P2OUT |= BIT6)                  
  16. #define CE_CLR()  (P2OUT &= ~BIT6)              //CE为低   
  17. #define out165    (P2IN & BIT7)>>7   
  18.   
  19. unsigned char readbyte[4];   
  20.   
  21. unsigned char  shift_byte(void);   
  22. void Init165(void);   
  23. void Flip165(void);   
  24. void InitializeUSART0(void);   
  25. void USART0Send(unsigned char ch) ;   
  26.   
  27. void main(void)   
  28. {        
  29.      // unsigned  int i;   
  30.          
  31.       WDTCTL = WDTPW + WDTHOLD;   
  32.       InitializeUSART0();   
  33.       Init165();     
  34.       P1SEL = 0;   
  35.       P1DIR = 0Xff;   
  36.       P6DIR = 0XFF;                  
  37.       while(1)   
  38.       {        
  39.             P6OUT = 0XFF;                                
  40.            // Flip165();   
  41.             USART0Send(0xaa);   
  42.              USART0Send(0xbb);   
  43.               USART0Send(0xcc);   
  44.                USART0Send(0xdd);   
  45.             /*  for ( i = 0 ; i < 4 ; i ++ )   
  46.             {  
  47.                  readbyte[i] = shift_byte();  
  48.              }   
  49.               
  50.             for ( i = 0 ; i < 4 ; i ++ )   
  51.             {  
  52.               
  53.             USART0Send(readbyte[i]);  
  54.             }  */  
  55.                
  56.     }   
  57. }   
  58.       
  59. unsigned char  shift_byte(void)           //读入一个字节   
  60. {        
  61.       unsigned char CH,i;   
  62.       CH = out165<<7;   
  63.       for ( i = 1 ; i < 8 ; i ++ )   
  64.       {            
  65.             CP_CLR();   
  66.             CP_SET();            
  67.             CH += out165<<(7-i);   
  68.       }   
  69.       CP_CLR();   
  70.       CP_SET();   
  71.       return CH;   
  72. }   
  73.   
  74. void Init165(void)                  //初始化设置P2口   
  75. {   
  76.       P2SEL = 0;   
  77.       P2DIR |= BIT4;   
  78.       P2DIR |= BIT5;   
  79.       P2DIR |= BIT6;   
  80.       P2DIR &= ~BIT7;   
  81.          
  82.       CE_CLR();   
  83.       PL_SET();   
  84.       CP_CLR();   
  85. }   
  86.   
  87. void Flip165(void)                  //并行读入数据   
  88. {   
  89.        PL_CLR();   
  90.        PL_SET();   
  91. }   
  92.          
  93. void InitializeUSART0(void)   
  94. {      
  95.      // BCSCTL1   &= ~XTS;   
  96.     //BCSCTL1  &= ~XT2OFF;   
  97.     //BCSCTL2  = SELS + DIVS_0;   
  98.     UCTL0  &= ~SWRST;   
  99.     UCTL0  = CHAR;   
  100.     UTCTL0 =    SSEL0   ;       // ACLK=32768   
  101.         
  102.     ME1 |= URXE0+UTXE0;   
  103.     IE1 |= URXIE0;   
  104.       
  105.     UBR00 = 0x03;   
  106.     UBR10 = 0x00;   
  107.     UMCTL0 = 0x4A;   
  108.       
  109.     P3SEL |= BIT4;   
  110.     P3SEL |= BIT5;   
  111.     P3SEL &~ BIT3;   
  112.     P3SEL &~ BIT2;   
  113.     P3DIR |= BIT3;   
  114.     P3DIR |= BIT2;   
  115.     P3OUT |= BIT3;   
  116.     P3OUT &~ BIT2;   
  117.     P3DIR |= BIT4;   
  118.     P3DIR &= ~BIT5;   
  119. }   
  120.   
  121. void USART0Send(unsigned char ch)        
  122. {   
  123.     TXBUF0 = ch;   
  124.     while ((UTCTL0&0x01) == 0);   
  125. }
复制代码

回复 支持 反对

使用道具 举报

发表于 2016-4-5 10:51:16 | 显示全部楼层

74C165不是SPI总线,你不能当SPI总线来所用。
回复 支持 反对

使用道具 举报

发表于 2016-4-6 11:10:10 | 显示全部楼层
应该是时序错了 先锁定数据 CS
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-27 09:39 , Processed in 0.030645 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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