查看: 1354|回复: 0
打印 上一主题 下一主题

从STM32的库函数到51

[复制链接]
跳转到指定楼层
沙发
发表于 2015-9-24 08:46:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
对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);


        }






}
复制代码转载

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入因仑

本版积分规则

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