上一篇:STM32-(06):位绑定的基础应用 | 下一篇:STM32-(08):USART通信基础 |
---|
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<stdio.h>
//----------------函数声明--------------------
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<dly;i++)
for(j=1000;j>0;j--);
}
仿真程序运行结果
上一篇:STM32-(06):位绑定的基础应用 | 下一篇:STM32-(08):USART通信基础 |
---|