代码
#include "stm32f10x.h"
typedef unsigned char u8;
typedef unsigned short int u16;
void delay_ms(u16 ms)
{
u16 j;
while(ms--)
{
for(j=0;j<1000;j++);
}
}
#define GPIOA_ODR (GPIOA_BASE+0x0C)
#define GPIOA_IDR (GPIOA_BASE+0x08)
#define GPIOB_ODR (GPIOB_BASE+0x0C)
#define GPIOB_IDR (GPIOB_BASE+0x08)
#define GPIOC_ODR (GPIOC_BASE+0x0C)
#define GPIOC_IDR (GPIOC_BASE+0x08)
#define GPIOD_ODR (GPIOD_BASE+0x0C)
#define GPIOD_IDR (GPIOD_BASE+0x08)
#define GPIOE_ODR (GPIOE_BASE+0x0C)
#define GPIOE_IDR (GPIOE_BASE+0x08)
#define BitBand(Addr,bitNum) *((volatile unsigned long *)((Addr&0xf0000000)+0x2000000+((Addr&0xfffff)<<5)+(bitNum<<2)))
#define PAout(n) BitBand(GPIOA_ODR,n)
#define PAin(n) BitBand(GPIOA_IDR,n)
#define PBout(n) BitBand(GPIOB_ODR,n)
#define PBin(n) BitBand(GPIOB_IDR,n)
#define PCout(n) BitBand(GPIOC_ODR,n)
#define PCin(n) BitBand(GPIOC_IDR,n)
void send_data(u8 data)
{
u16 i;
PAout(1) = 0;
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;
}
}
int main(void)
{
//PA.0链接AB,PA.1连接CLOCK,PB.0连接clear
//使得164的QA~QH输出11000100
//1、设置引脚工作模式,PA.0,PA.1,PB.0作为推挽输出
//2、164通信,PA.0 = 0,PA.1上升沿
GPIOA->CRL = 0x33;
GPIOB->CRL = 0x03;
send_data(0xC4);
return 0;
}
打开逻辑分析仪。
编译代码,进入调试打开逻辑分析仪。
设置分析参数。
PORTA.0
PORTA.1
DisplayType 改为bit
全速运行查看结果。(点击Zoom Out可以缩小视图)