对STM32的库函数学习了一段时间,之前一直都是51,还有AVR,别的没接触过,AVR上都没用用到结构体
所以以前用C语言都是很简单的,直到32上,涉及到了结构体,看了很多遍,理解的都不是很透彻,所以今天写了这个代码,很简单
通过结构体初始化51单片机的定时器1通过串口发送数据 0x7f 程序可用
2.从初始化51串口的角度看,这个程序是没有意义的,但是对于刚从51转到STM32的应该有帮助吧//STM32中的结构体基本是这么用的
3.程序写的不好,很简单,主要是理解结构体,我感觉他很复杂,用STM32的库感觉吃力
4.STM32中为什么用结构体的原因在这里没有说:主要是结构体方便后续扩充变量,因为函数指向的是结构体的首地址。而不是增加传递函数的个数
5.欢迎大神指导,大家一起交流学习!
#include <reg52.h>
#define u8 unsigned char
#define u16 unsigned int
/****************************
一。把我们要初始化的变量比作是车
把变量的值比作是货物
使用结构体就是为了把货物装入车中。
1.定义了一个结构体Com ,注意结构体属于用户自定义的变量类型 //准备好车
2.为了把货整齐的装入车中,定义了一个Com类型的结构体uart //准备好货
3.Com就是车,uart其实是货物,到这应该明白点了
4.最后一步把货物装到车中 //把货物装到车中
通过函数void Com_Value(Com* msg)实现
二。关于结构体的基础知识
1.结构体可以是不同种变量的组合
2.①可以通过结构体变量名字.成员名 引用成员变量
②可以通过结构体指针—>成员变量 引用成员变量
******************************/
/*
author:zhanglei
time:2014-4-8 21:38:50
explain: 定义名字是Com的结构体
*/
typedef struct
{
u8 scon;
u8 pcon;
/*
1.结构体变量列表
2.变量可以是不同的类型
*/
u8 ren;
u8 tmod;
u8 th;
u8 tl;
u8 tr;
} Com;
void delayms(unsigned char i)
{
unsigned char j;
for(;i>0;i--)
{
for(j=0;j<200;j++);
}
}
/*
函数名:Com_Value
注意:在入口参数中,定义了Com结构体指针 msg
*/
void Com_Value(Com* msg)
{
SCON=msg->scon; //串口方式1
PCON=msg->pcon; //SMOD=0
REN=msg->ren; //允许接收
TMOD=msg->tmod; //定时器1定时方式2
TH1=msg->th; //11.0592M 9600波特率
TL1=msg->tl;
TR1=msg->tr; //启动定时器
}
/*
function:初始化串口
定义Com类型的结构体uart
并初始化结构体内的变量
*/
void Com_Init(void)
{
Com uart;
uart.scon=0x40; //串口方式1
uart.pcon=0; //SMOD=0
uart.ren=1; //定时器1定时方式2
uart.tmod=0x20;
uart.th=0xfd; //11.0592M 9600波特率
uart.tl=0xfd;
uart.tr=1; //启动定时器
Com_Value(&uart); //初始化定时器1
}
void main(void)
{
Com_Init();//初始化串口
while(1)
{
SBUF=0x7f;
while(TI==0);
TI=0;
delayms(100);
}
}
复制代码转载
|