2010-06-23 15:27:00 geduo4612 阅读数 2153
  • 51单片机综合小项目-第2季第4部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第2季第4个课程,也是51单片机学完之后的一个综合小项目,该项目运用了开发板上大多数外设设备,并将之结合起来实现了一个时间、温度显示以及报警功能、时间调整功能等单片机控制常见的功能,有一定代码量,需要一定调试技巧和编程能力来完成,对大家是个很好的总结和锻炼,并且能拓展项目经验。

    3415 人正在学习 去看看 朱有鹏

昨天看了齐工的报告才知道release模式和debug模式烧写.hex文件的不同。

三:问题分析

1. PIC系列的仿真器和集成开发环境的情况:

Ø Release模式和Debug模式是有区别的;Release模式是只把代码烧录到单片机的flash区内,上电执行;而Debug模式除了烧录代码外,还会烧录一部分Debug调试代码到程序区的高地址区域,该部分代码可以通过仿真器和集成开发环境进行数据交换,完成仿真和在线调试功能。如图1、图2所示。

Ø 在debug模式下,单片机脱离仿真器单独上电是不能正常工作的;

Ø 上述现象是有该款仿真器所决定的,在实现仿真功能的时候,需要烧录一段调试代码到flash区域中,该模式是要占用单片机的片上资源的,导致在模式下单片机单独上电是不能正常工作的。

1release模式的高端地址区域---是空的

2debug模式的高度地址区域----是有调试代码

2019-08-14 14:59:54 qq_33446100 阅读数 457
  • 51单片机综合小项目-第2季第4部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第2季第4个课程,也是51单片机学完之后的一个综合小项目,该项目运用了开发板上大多数外设设备,并将之结合起来实现了一个时间、温度显示以及报警功能、时间调整功能等单片机控制常见的功能,有一定代码量,需要一定调试技巧和编程能力来完成,对大家是个很好的总结和锻炼,并且能拓展项目经验。

    3415 人正在学习 去看看 朱有鹏

说在前面

  • 单片机:HC6800-ES,晶振12MHz
  • 蓝牙模块:BT08(兼容HC-06、HC-05)
  • 串口调试工具:这里 wibr(烧录软件中的普中科技烧写软件)
  • 吐槽:搞了大半天,总算搞通了

关于引脚

  • 打开开发板原理图,找到RX、TX
    在这里插入图片描述
    对应这里
    在这里插入图片描述

AT模式进行配置

在这里插入图片描述

  • 问题提出

    我们首先需要配置蓝牙的波特率,由于我们的晶振为12MHz,而该蓝牙模块的默认波特率是9600,使用这种配置会导致在测试的时候蓝牙返回乱码,如下图,误差过大。
    在这里插入图片描述
  • 解决方法

    1. 更换晶振(但是俺们只有这一个晶振)
    2. 修改蓝牙模块的波特率(如何修改?)
  • 进入AT模式配置波特率(无需转接口)

    • 将蓝牙模块与单片机相连
      (在AT模式下使用下述连接方式,见下面的表格1)
      (连接可使用母对母杜邦线)
    • 将单片机连接电脑并打开电源
      在这里插入图片描述
    • 打开串口调试工具
    • 选择串口号,即单片机所使用的串口
    • 选择波特率9600(与蓝牙默认保持一致
    • 在发送区输入AT和一个换行(即输入AT后按下Enter键)
    • 点击发送(可以看到接受区收到OK)
      在这里插入图片描述
    • 然后将发送区清空,并输入AT+BAUD3和一个换行(即输入AT后按下Enter键,BAUD3表示波特率4800)
    • 点击发送(若接收到OK+BAUD3则表示设置成功,否则多试几次)
      在这里插入图片描述
蓝牙引脚 单片机引脚
RXD P3.0(RXD)
TXD P3.1(TXD)
VCC VCC
GND GND
表格1
  • 设置成功

    设置成功后,将RXD与TXD交换
蓝牙引脚 单片机引脚
RXD P3.1(TXD)
TXD P3.0(RXD)
VCC VCC
GND GND

测试

  • 代码

/**************************************************************************************
*		              串口通信实验												  *
实现现象:下载程序后打开串口调试助手,将波特率设置为4800,选择发送的数据就可以显示
			在串口助手上。
注意事项:无。																				  
***************************************************************************************/

#include "reg52.h"			 //此文件中定义了单片机的一些特殊功能寄存器

typedef unsigned int u16;	  //对数据类型进行声明定义
typedef unsigned char u8;


/*******************************************************************************
* 函数名         :UsartInit()
* 函数功能		   :设置串口
* 输入           : 无
* 输出         	 : 无
*******************************************************************************/
void UsartInit()
{
	SCON=0X50;			//设置为工作方式1
	TMOD=0X20;			//设置计数器工作方式2
	PCON=0X80;			//波特率加倍
	TH1=0XF3;				//计数器初始值设置,注意波特率是4800的
	TL1=0XF3;
	ES=1;						//打开接收中断
	EA=1;						//打开总中断
	TR1=1;					//打开计数器
}

/*******************************************************************************
* 函 数 名       : main
* 函数功能		 : 主函数
* 输    入       : 无
* 输    出    	 : 无
*******************************************************************************/
void main()
{	
	UsartInit();  //	串口初始化
	while(1);		
}

/*******************************************************************************
* 函数名         : Usart() interrupt 4
* 函数功能		  : 串口通信中断函数
* 输入           : 无
* 输出         	 : 无
*******************************************************************************/
void Usart() interrupt 4
{
	u8 receiveData;

	receiveData=SBUF;//出去接收到的数据
	RI = 0;//清除接收中断标志位
	SBUF=receiveData;//将接收到的数据放入到发送寄存器
	while(!TI);			 //等待发送数据完成
	TI=0;						 //清除发送完成标志位
}
  • 结果

    终于不乱码了,hhhhhh
    在这里插入图片描述

END

2019-11-11 19:13:08 Albert992 阅读数 101
  • 51单片机综合小项目-第2季第4部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第2季第4个课程,也是51单片机学完之后的一个综合小项目,该项目运用了开发板上大多数外设设备,并将之结合起来实现了一个时间、温度显示以及报警功能、时间调整功能等单片机控制常见的功能,有一定代码量,需要一定调试技巧和编程能力来完成,对大家是个很好的总结和锻炼,并且能拓展项目经验。

    3415 人正在学习 去看看 朱有鹏

JLINK仿真器有JTAG和SWD两种模式。

在淘宝上检索了一个JLINK V9的ARM仿真器,上面有相关的介绍,笔者码了下来。

使用SWD模式用JLINK给我们的板子debug时,是用标准的二线DIO和CLK,复位管脚可不接。
在这里插入图片描述
使用JTAG模式给板子烧录程序时,需要接标准的4根线,TDI,TMS,TCK,TDO,分别是数据输入,模式选择,时钟,数据输出,复位管脚可不接。
在这里插入图片描述

2019-01-06 18:27:16 longtype 阅读数 447
  • 51单片机综合小项目-第2季第4部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第2季第4个课程,也是51单片机学完之后的一个综合小项目,该项目运用了开发板上大多数外设设备,并将之结合起来实现了一个时间、温度显示以及报警功能、时间调整功能等单片机控制常见的功能,有一定代码量,需要一定调试技巧和编程能力来完成,对大家是个很好的总结和锻炼,并且能拓展项目经验。

    3415 人正在学习 去看看 朱有鹏

下载和烧写区别:

什么是烧写?

        就是把直接把程序写在运行的地址上。

        就是将写好的程序编译好形成HEX或BIN文件后,将这个程序写进单片机芯片的过程就叫烧写,是沿用最早的单片机只能一次性写入,因此就叫做烧写,后来有了紫外线可擦除的EEPROM,现在有了可随时擦除的FLASH ROM,但依然沿用叫烧写了,这样也好,可以特指PC向MCU写入程序。免得和单片机工作时串口的上传和下次数据相混淆

什么是下载?

   下载是操作系统将收到的文件保存到本地文件系统上(或映射到本地的文件系统上),不关心文件的物理存储位置。

人们常常将烧写和下载认为是一回事。

 

 两种在线编程: ISP和IAP

什么是ISP(在系统编程): 
用写入器将code烧入,不过,芯片可以在目标板上,不用取出来,在设计目标板的时候就将接口设计在上面,所以叫"在系统编程",即不用脱离系统;      

     举个例子:     51单片机程序烧写的原理是什么?就是isp程序,stc的单片机里面有个boot程序,是固化到rom中的,用户改不了。 这个boot程序就是用来做串口通讯和编程FLASH ROM的。 所以可以直接烧写。但是需要个最小的系统,电源+晶振电路时必须的。对于单片机来讲可以通过SPI或其它的串行接口接收上位机传来的数据并写入存储器中。所以即使我们将芯片焊接在电路板上,只要留出和上位机接口的这个串口,就可以实现芯片内部存储器的改写,而无须再取下芯片。 


什么是IAP(在应用编程): 
          IAP的实现相对要复杂一些, 在应用编程,有芯片本身(或通过外围的芯片)可以通过一系列操作将code写入,比如一款支持Iap的单片机,

内分3个程序区,

  • 1作引导程序区,
  • 2作运行程序区,
  • 3作下载区,芯片通过串口接收到下载命令,进入引导区运行引导程序,在引导程序下将new code内容下载到下载区,下载完毕并校验通过后再将下载区内容复制到2区,运行复位程序,则Iap完成;

isp和iap的相同点:

         都不需要把芯片从板子上拔出来。

          殊途同归,ISP、IAP所进入的BootROM里面驻留的Boot代码,才是最终目标。

sip和iap不同点

 

打个比喻吧:

1、ISP是把房子拆了再重造一间,那么在造好之前当然是不能住人的啦!

       触发升级下载后,原有的程序停止,执行uboot下载程序,把新的程序固件下载到原有程序固件所在位置。再重启,  软件更新完毕!

2、IAP是在造好的房子里边进行一些装修,当然人可以继续住啦!

      运行程序区的程序已经在运行,收到远程或其他通信命令,下载新固件到下载区,下载完毕并校验通过后,  运行程序区的程序已经在运行停止,引导程序区程序跑起来,再将下载区固件复制到  运行程序区,运行复位程序。  软件更新完毕!

ISP和IAP最大的不同是:由谁来触发。

ISP有4种触发方式:

1.由外部硬件电路:如VDD保持高电平,给RST连续3个脉冲;

2.检测状态位:如ISPEN,为0时PC指针从0000H开始执行;为1时,通过“引导向量”计算出“ISP代码”的位置。每次复位后都会检测该状态位;

3.中止控制符信号触发芯片复位:中止控制符信号就是指在异步串行口的接收脚上出现长 达一帧长度的低电平,这里一帧的长度与异步串行口的工作模式有关。

4.直接调用ISP:用户程序也可以调用,但是很危险。

4种方式的目的是相同的——进入ISP子程序,比如Philips出厂的ISP子程序在1E00H-1FFFH,只要能引导PC指针指向1E00H就可以了。

而进入ISP代码的目的是:进入BootROM。
IAP的触发比较简单一些,没有外部触发。
通过一些指示位(SST为SC0/SC1、SFCF;Philips为一段IAP子程序,保存在FF00H~FFFFH地址空间中),
达到引导到BootROM的目的。

IAP的实现

通常在用户需要实现IAP功能时,即用户程序运行中作自身的更新操作,需要在设计固件程序时编写两个项目代码,第一个项目程序不执行正常的功能操作,而只是通过某种通信管道(如USB、USART)接收程序或数据,执行对第二部分代码的更新;第二个项目代码才是真正的功能代码。这两部分项目代码都同时烧录在User Flash中,当芯片上电后,首先是第一个项目代码开始运行,它作如下操作:

1)检查是否需要对第二部分代码进行更新

2)如果不需要更新则转到4)

3)执行更新操作

4)跳转到第二部分代码执行

第一部分代码必须通过其它手段,如JTAG或ISP烧入;第二部分代码可以使用第一部分代码IAP功能烧入,也可以和第一部分代码一道烧入,以后需要程序更新是再通过第一部分IAP代码更新。

对于STM32来说,因为它的中断向量表位于程序存储器的最低地址区,为了使第一部分代码能够正确地响应中断,通常会安排第一部分代码处于Flash的开始区域,而第二部分代码紧随其后。

在第二部分代码开始执行时,首先需要把CPU的中断向量表映像到自己的向量表,然后再执行其他的操作。

如果IAP程序被破坏,产品必须返厂才能重新烧写程序,这是很麻烦并且非常耗费时间和金钱的。针对这样的需求,STM32在对Flash区域实行读保护的同时,自动地对用户Flash区的开始4页设置为写保护,这样可以有效地保证IAP程序(第一部分代码)区域不会被意外地破坏。

殊途同归,ISP、IAP所进入的BootROM里面驻留的Boot代码,才是最终目标。

 

应用场合:

1,ISP 程序升级,人要到现场解决

2,IAP   

根据程序:包含ota(或以太网通信升级程序),可以远程下载升级程序,人不用到现场。

                不包含ota(或以太网通信升级程序),人还是要到现场。

 OTA(Over-the-Air Technology)即空中下载技术,是通过移动通信(GSM或CDMA)的空中接口对SIM卡数据及应用进行远程管理的技术。) 

 

 

 

 

 

 

 

 


 

2019-03-19 08:34:18 xishiquanqiu 阅读数 420
  • 51单片机综合小项目-第2季第4部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第2季第4个课程,也是51单片机学完之后的一个综合小项目,该项目运用了开发板上大多数外设设备,并将之结合起来实现了一个时间、温度显示以及报警功能、时间调整功能等单片机控制常见的功能,有一定代码量,需要一定调试技巧和编程能力来完成,对大家是个很好的总结和锻炼,并且能拓展项目经验。

    3415 人正在学习 去看看 朱有鹏

编程软件:HT-IDE3000+e-link
软件搭配E-link下载器,能够实现对HT66V系列的调试
(HT66Vxxxx为调试版MCU,HT66Fxxxx为烧录版)
烧录软件:HOPE3000
程序编写方式:
IO上电初始化,注意事项,考虑IO口重叠功能的优先级,
上电清除RAM数据

看门狗默认为上电开启

软件问题:
问题:单个LED点亮出现闪亮
测试:示波器测试LED口出现方波,计算周期为看门狗周期
解决:占时关闭看门狗,或者加上喂狗程序

问题:AD测试不准确
测试:计算实际值与测量值误差(取高8位,不能按12位计算10进制值)
解决:在程序初始化程序中开启了定时器中断void Ptm1InitForTicks( void );
,但是没有打开中断程序,/*
#pragma vector Isr_Ptm @0x10

void Isr_Ptm( void )
造成程序时间出现误差,AD转换时间变长,导致AD检测值偏大

硬件:
问题:AD测量出现偏差
测试:Vr电位器两端有波动
解决:在MCU的VDD和VSS直接接入47uf电容,在电位器两端接10uf电容滤波。

总结:
1:初始化---->看门狗,IO,
_wdtc:看门狗
_pac:输入输出模式
_papu:上拉电阻
_pawu :唤醒功能
_pasr :IO口功能测试
temp == 1 11001010
_ptm0rpl = (BYTE)temp; //11001010
_ptm0rph = (BYTE)(temp>>8); //01

没有更多推荐了,返回首页