历史上的今天
返回首页

历史上的今天

今天是:2025年08月12日(星期二)

正在发生

2019年08月12日 | STM32-(07):串行通信基础(164芯片)

2019-08-12 来源:eefocus

164芯片的通信


微处理器与外设交换数据的过程中可选择以下两种方式:


并行通信:数据的各个数位同时传送;

串行通信:数据按照位顺序一位一位传送;


通信制式:

在串行通信中数据是在两个站之间进行传送的,按照数据传送方向,串行通信可分为单工、半双工和全双工3中制式。


在这里插入图片描述


1、在单工制式下,数据只能从发送站向接收站传送。

2、在半双工制式下,数据能双向传送,但是不能同时在两个方向上传送。

3、全双工制式下,接收数据和发送数据占用不同的线路。全双工通信可以同时发送和接收。


串行通信标准有许多,下面对部分常见的串行通信标准进行简单介绍。

在这里插入图片描述


最简单的单工通信


1.与外设串行通信过程中,数据是一位一位依次顺序传送的 ; 而在微处理器内部,数据是并行处理和传送的。

2.当微处理器发送数据到外设时,必须要先把并行的数据转换为串行数据再传送;当微处理器接收来自外设的数据时,必须要先把接收到的串行数据转换为并行数据才能处理。

3.这种并/串之间的转换既可用硬件实I也可用软件实现。

4.以74LS164芯片为例,介绍如何用软件方法实现数据的串一并转换。(ARM与74LS164之间的串行通信)


74LS164芯片:串行输入,并行输出

在这里插入图片描述


引脚功能:

1.A、B:串行数据输入端。

2.Clock:时钟输入端。

3.Clear:清零端。低电平有效。

4.QA~QH:数据输出引脚。


真值表:(L低电平,H高电平,X表示任意值,↑表示上升沿)

大致可看出:当清零端为高电平,时钟输入为上升沿时,起作用,A、B有一个输入低电平,输出全为低电平。

在这里插入图片描述


74LS164的时钟是由ARM处理器产生,每来1个上升沿74LS164就接收1位数据。

假设要使QA~QH = 10110011,则ARM 要发送一串数据 10110011 给A、B输入端,并产生相应的时钟信号。

在这里插入图片描述


164内部结构(连接示意----一共有8个D触发器)

在这里插入图片描述


芯片简介

在这里插入图片描述


实验

连接示意

在这里插入图片描述

在这里插入图片描述

代码


// PA.0连接A/B,PA.1连接Clock,PB.0连接Clear

// 使得164的QA~QH输出:11000011


//----------------头文件声明--------------------

#include"stm32f10x_lib.h" //包含所有的头文件

#include

//----------------函数声明--------------------

void Delay_MS(u16 dly);

void RCC_Configuration(void);

void GPIO_Configuration(void);


#define PA1 GPIOA->BSRR

#define PA0 GPIOA->BRR


#define GPIOA_ODR_A  (GPIOA_BASE+0x0C)

#define GPIOA_IDR_A  (GPIOA_BASE+0x08)

#define GPIOB_ODR_A  (GPIOB_BASE+0x0C)

#define GPIOB_IDR_A  (GPIOB_BASE+0x08)

#define GPIOC_ODR_A  (GPIOC_BASE+0x0C)

#define GPIOC_IDR_A  (GPIOC_BASE+0x08)

#define GPIOD_ODR_A  (GPIOD_BASE+0x0C)

#define GPIOD_IDR_A  (GPIOD_BASE+0x08)

#define GPIOE_ODR_A  (GPIOE_BASE+0x0C)

#define GPIOE_IDR_A  (GPIOE_BASE+0x08)


#define BitBand(Addr,BitNum)    *((volatile unsigned long *)((Addr&0xF0000000)+0x2000000+((Addr&0xfffff)<<5)+(BitNum<<2)))


#define PAout(n)   BitBand(GPIOA_ODR_A,n)

#define PAin(n)    BitBand(GPIOA_IDR_A,n)

#define PBout(n)   BitBand(GPIOB_ODR_A,n)

#define PBin(n)    BitBand(GPIOB_IDR_A,n)

#define PCout(n)   BitBand(GPIOC_ODR_A,n)

#define PCin(n)    BitBand(GPIOC_IDR_A,n)

#define PDout(n)   BitBand(GPIOD_ODR_A,n)

#define PDin(n)    BitBand(GPIOD_IDR_A,n)

#define PEout(n)   BitBand(GPIOE_ODR_A,n)

#define PEin(n)    BitBand(GPIOE_IDR_A,n)


/*******************************************************************************

* Function Name  : main

* Description    : Main program.

* Input          : None

* Output         : None

* Return         : None

*******************************************************************************/ 

int  main(void)

{

u8 data,i;

//1、设置PA.0推挽输出,设置PA.1、PB.0推挽输出

GPIOA->CRL = 0x33;

GPIOB->CRL = 0X03;

//2、进行164通信 QA~QH=11000100 , PA.0=0, PA.1来一个上升沿

PBout(0) = 1;

data = 0xC4;

for(i=0;i<8;i++)

{

PAout(1) = 0;

if((data&0x01)==0x01)

PAout(0) = 1;

else

PAout(0) = 0;

Delay_MS(1);

PAout(1) = 1;

Delay_MS(1);

data=data>>1;

return(1);

}


/*******************************************************************************

* Function Name  : Delay_Ms

* Description    : delay 1 ms.

* Input          : dly (ms)

* Output         : None

* Return         : None

*******************************************************************************/

void Delay_MS(u16 dly)

{

u16 i,j;

for(i=0;i for(j=1000;j>0;j--);

}


仿真程序运行结果

在这里插入图片描述


推荐阅读

史海拾趣

智烽维(CDA)公司的发展小趣事

随着技术的不断成熟和市场的不断拓展,智烽维在2015年开始面向全球开展业务。公司凭借卓越的产品质量和优质的服务,成功打入了国际市场,并在多个国家和地区建立了稳定的销售网络。全球业务的拓展不仅为智烽维带来了更多的商机,也进一步提升了公司的品牌影响力和市场竞争力。

AKM [Asahi Kasei Microsystems]公司的发展小趣事

在超级电容器领域不断取得突破的同时,智烽维也在积极探索新的技术领域。2018年,公司成功实现了锂离子电容器的研发突破。这一成果不仅填补了公司在这一领域的空白,也为公司未来的发展开辟了新的道路。锂离子电容器以其高能量密度、高功率密度和长寿命等特点,在新能源汽车、智能电网等领域具有广阔的应用前景。

BOPLA公司的发展小趣事

BOPLA公司成立于XXXX年,初期主要致力于电子开关、熔断器等基础电子元件的研发与生产。创始人凭借对电子行业的深厚理解和敏锐的市场洞察力,带领公司逐步在竞争激烈的市场中站稳脚跟。通过不断的技术创新和品质提升,BOPLA的产品逐渐获得了客户的认可,为公司后续的发展奠定了坚实的基础。

大毅科技公司的发展小趣事

作为一家有社会责任感的企业,大毅科技始终关注环境保护和可持续发展。公司积极推行绿色生产理念,采用环保材料和节能技术,减少生产过程中的废弃物排放和能源消耗。同时,大毅科技还积极参与公益事业和社区活动,回馈社会。这些举措不仅体现了公司的社会责任感,也赢得了社会的广泛赞誉。

以上是关于大毅科技在电子行业中的5个发展故事概述。这些故事展示了大毅科技在创立、生产基地拓展、品质认证与国际化、技术创新与研发以及社会责任与可持续发展等方面的努力和成就。

Anders DX公司的发展小趣事

大毅科技于1989年成立,是台湾的一家新兴企业。在公司成立的初期,大毅科技就专注于晶片电阻的研发与生产,这在当时是一个相对新兴且竞争激烈的领域。创始人凭借对技术的深刻理解和敏锐的市场洞察力,带领公司逐步在市场中站稳脚跟。通过不断的技术创新和产品优化,大毅科技逐渐获得了客户的认可,并在行业中树立了自己的品牌。

Gore公司的发展小趣事
在大功率电机驱动系统中,三电平直流变换器能够提供足够的功率和精确的电压控制,满足电机的运行需求。

问答坊 | AI 解惑

WINCE 控制面板看不到“存储器管理”

问你们的WINCE5。0系统中控制面板都有“存储器管理”这个东西吗,我在网上看到,大家似乎都有,我的中文内核和英文内核都看不到这个啊。什么原因呢? …

查看全部问答>

固件更新如何设计?

  本人在项目中设计的系统需要在线更新,是一个基于DSP的系统,就是可以通过上位机经过网口更新配置里面的算法程序及参数,但是不知道具体的框架设计.因为要更新肯定要涉及到FLASH的烧写,但又不是全部擦除和烧写,只更新需要更新的,那这个如何 ...…

查看全部问答>

现在大家都用wince6.0开发吗

现在大家都用wince6.0开发吗? 哪里有支持BSP6.0这样的开发板?…

查看全部问答>

关于蓝牙速率的迷惑和测试报告

市面上的蓝牙适配器BTH v2.0 + EDR 宣称最大数据率可达到3Mbps 在我们项目中使用了一块CSR芯片的某小公司的蓝牙模块,下位机与之相接的UART波特率选921600bps (约92KB/s)。但在实际的数据传输中,下位机最快只能是50微秒发送一个字节(20KB/s) ...…

查看全部问答>

我的socket传输数据问题

各位大侠我都要抓狂了。用socket在Arm7开发板与PC进行通信。 Arm7端的接收PC机发来的字符串 iRecv=recvfrom(ClientSock_in, (char *)RecvData, 8, 0, (struct sockaddr*)&cliaddr_in, (int*)&fromlen); PC机端发送数据: RecvData=\" ...…

查看全部问答>

485通信双方需要接地线吗?

在网上看到这样一句话:RS-485通信双方的地电位差要求小于1V。 我量了自己的主机和从机之间的地电位差为1.9V,是不是因为这个原因才导致无**常通信的呢?…

查看全部问答>

STM32F100系列市场上有了吗?

                                 我尤其关注STM32F100V8…

查看全部问答>

ADC校准

请教:各位都用什么方法进行ADC校准?能否贴段程序参考下,不胜感谢!!…

查看全部问答>

PCB设计中的接地

请各位老师帮我解释一下,在PCB设计中“一点接地”和“多点接地”是什么意思?有点乱!还有就是数字地和模拟地应分开,那么为什么还要仅在系统一点上把两种“地”连接起来?谢谢了…

查看全部问答>