2015-10-20 22:45:29 liucheng5037 阅读数 4221
  • 巫妖王51单片机开发板配套视频课程

    本课程是巫妖王51单片机开发板的配套视频课程,本课程的目标是用少的时间带大家初级入门51单片机。配合巫妖王51单片机开发板,让大家花费少的时间少的钱就能轻松开启单片机学习之路。

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

很多外部模块是使用串口的方式与单片机通信的,但有的单片机只有一个串口,且不能硬件仿真,比如我使用的STC90C516,如果将唯一的串口给了外部模块,就不能打印调试信息了。

不过如果是使用AT指令只这样的模块,比如蓝牙SPP,WiFi模块,是使用AT指令的方式通信的

我们可以保留单片机串口与PC的连接,串口同时与模块连接,这样单片机的发送信息同时被模块和PC收到了。

模块只对AT指令有反应,对其他格式不正确的指令无反应,

如:

printf("AT+RST\r\n");//模块对该指令有反应
printf("DEBUG+RST Test\r\n");//模块对该指令无反应</span>

这样串口就可以接收发送的数据和调试信息了,注意指令后面要加换行符。

2019-08-25 22:29:26 weixin_45211835 阅读数 185
  • 巫妖王51单片机开发板配套视频课程

    本课程是巫妖王51单片机开发板的配套视频课程,本课程的目标是用少的时间带大家初级入门51单片机。配合巫妖王51单片机开发板,让大家花费少的时间少的钱就能轻松开启单片机学习之路。

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

main.c

#include <reg52.h>


bit flagtxd=0;//发送单个字符成功标志
unsigned char rxdbyte=0;//接收变量


void Uart1_SendChar(unsigned char Udat)//发送单个字符函数
{
   flagtxd=0;
	SBUF=Udat;		//将要发送的数据放入串口数据缓冲区
	while(!flagtxd);		//等待发送完成
   	
}

void putchar(char c)
{

Uart1_SendChar(c);

}

void printf(unsigned char *p)//自编printf函数,非官方的那个函数
{
  while(*p!='\0')
  {
  putchar(*p++);

  }

}


void InitUART(unsigned int baud)//串口初始化

{

SCON = 0x50;	 //串口接收使能
TMOD&=0x0F;
TMOD|=0x20;
TH1=256-(11059200/12/32)/baud;
TL1=TH1;
ET1=0;
ES = 1;			 //串口中断使能
TR1 = 1;		 //定时器1使能

}


//毫秒延时函数

void delay_ms(unsigned int t)

{

unsigned char a,b;

while(t--)

{

for(b=102;b>0;b--)

for(a=3;a>0;a--);

}

}

void InitESP8266()//ESP8266初始化,延时时间是不合适的,你们自己调整一下
{
printf("AT\r\n");  //测试
        delayms(1200);         //适当延时,给wifi模块一点反应时间
       
        printf("AT+CWMODE=1\r\n");  //选择STA模式
	delayms(1200);

        printf("AT+RST\r\n");  //往串口发重启指令
	delayms(1200);         //适当延时,给wifi模块一点反应时间
 
	printf("AT+CWJAP=\"wifi\",\"123456\"\r\n");  //连接WIFI
	delayms(1200);
 
	printf("AT+CIPMUX=0\r\n");  //单通道模式
	delayms(1200);
	
	printf("AT+CIPSTART=\"TCP\",\"192.168.1.118\",6666\r\n");  //连接远程主机IP和端口号
	delayms(1200);
 
	printf("AT+CIPMODE=1\r\n");  //选择透传
	delayms(1200);
 
	printf("AT+CIPSEND\r\n");  //发送数据命令
	delayms(1200);

}

void main()

{

InitUART(9600);	//初始化串口
InitESP8266();

EA = 1;	 	//开总中断

while(1);

 
        
 
	


 


}


/*UART中断函数*/
void interruptUART() interrupt 4
{
if(RI)
 {
 RI=0;
 rxdbyte=SBUF;
 SBUF=rxdbyte;//将收到的数据回传回去,可以自己对返回数据做判断,执行动作
 }

if(TI)
 {
 TI=0;
 flagtxd=1;
 }
}
2018-10-15 17:32:05 gaolingzhi 阅读数 273
  • 巫妖王51单片机开发板配套视频课程

    本课程是巫妖王51单片机开发板的配套视频课程,本课程的目标是用少的时间带大家初级入门51单片机。配合巫妖王51单片机开发板,让大家花费少的时间少的钱就能轻松开启单片机学习之路。

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

拿到61M M2M_11C_V12_GPRS_MMI的代码,编译后AT指令只能通过虚拟串口发送,需要把虚拟串口转化成普通串口,让单片机能够控制或者能通过串口工具进行发送at指令,修改方法如下:
 1、 custom\drv\misc_drv\_Default_BB\MT6261\uart_def.c
   UART_flowCtrlMode  UART_GetFlowCtrl(UART_PORT uart_port)
{
 UART_flowCtrlMode flow_ctrl;
 
   switch(uart_port)
   {
      case uart_port1:
#if defined(__EXT_MODEM__) || defined(EMPTY_MMI) //for g+c or modem
flow_ctrl = fc_none;//fc_hw;
#else
flow_ctrl = fc_none;
#endif
         break;
...............
}

2、hal\peripheral\src\uart.c
void UART_HWInit(UART_PORT port)
{
......................
   /* BaudRate and autoflowcontrol */
   if(port == debug_port)
   {
      DCBdefault->baud = debug_baudrate;
       #if !defined(DRV_UART_SWITCHABLE_BETWEEN_PROCESSORS) && !defined(__MEUT__) && !defined(__MEIT__)  //liming add  for MEUT test(when uart1 as comunication port,can't sw flowcontrol,for testcase19(0x13))
      DCBdefault->flowControl = fc_none;//fc_sw;
     #endif
   }
..........
}

3、custom\common\hal\nvram\nvram_data_items.c
static port_setting_struct const NVRAM_EF_PORT_SETTING_DEFAULT[]=
{
........................
static port_setting_struct const NVRAM_EF_PORT_SETTING_DEFAULT[]=
{
    {
    #if defined (WISDOM_MMI) || defined(NEPTUNE_MMI) || defined(__MMI_TST_AUTO_OUTPUT_UART__)
        0,   /* tst-ps uses uart_port2(value is 1) */
        1,   /* APP uses uart_port1 (value is 0) */
    #elif defined(__DUAL_TALK_MODEM_SUPPORT__)
        5,   /* tst-ps uses uart_port1 */
        uart_port1,   /* APP uses uart_port2 */
    #elif defined(__USB_MULTIPLE_COMPORT_SUPPORT__) && defined(__L4_INIT_MULTIUSB_COM__)
        0,   /* TST-PS uses uart_port1 */
        5,   /* ATCI uses uart_port_usb2 */           
    #elif defined(__WIFI_TCPIP_AT_SUPPORT__) || defined(__GPRS_TCPIP_AT_SUPPORT__)||defined(__IPV4V6__)
        #if defined( __WIFI_TCPIP_AT_SUPPORT__)
        4,   /* USB port */
        0,  /* uart_port1 */
        #elif defined (__USB_MULTIPLE_COMPORT_SUPPORT__)
        5,  
        0,  /* 配置ps_port用于通AT的uart口*/ 
        #else
        4,   /* USB port */
        0,  /* 配置ps_port用于通AT的uart口*/
        #endif
    #elif defined(__IOT__) || defined(__MMI_TST_AUTO_OUTPUT_USB__)
        4,   /* USB port */
        99,  /* uart_port_null */
    #elif defined(__BCM_AT_CMD__)
        0,    /* UART PORT 1 FOR tst-ps  */
        4,    /* USB port  1 FOR PS  */
    #else
        99,   /* tst-ps uses uart_port_null(value is 99)AT设置为99 ,串口打印用0*/
        0,   /* APP uses uart_port1 (value is 0) */
    #endif

........................
}

2019-09-18 20:53:49 ydgd118 阅读数 191
  • 巫妖王51单片机开发板配套视频课程

    本课程是巫妖王51单片机开发板的配套视频课程,本课程的目标是用少的时间带大家初级入门51单片机。配合巫妖王51单片机开发板,让大家花费少的时间少的钱就能轻松开启单片机学习之路。

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

串口连接采用官方手册推荐的电阻分压方法。
在这里插入图片描述
1.单片机每秒发送一次AT指令
2.示波器检查RX和TX端信号,MC20输出是2.8V,STM32是3.3V
3.发现每秒钟单片机TX线发送信号逻辑正常,但是RX线一直是2.8V
4.检查单片机串口RX脚配置正常
5.检查发送的字符数组正常
6.反复对照官方例程,发现数组格式错误。
原来使用了uint8_t格式定义了AT数组,但是例程使用的char格式定义的
把uint8_t改成char后,MC20的AT指令响应立即正常

2016-11-28 19:29:55 cheng401733277 阅读数 2384
  • 巫妖王51单片机开发板配套视频课程

    本课程是巫妖王51单片机开发板的配套视频课程,本课程的目标是用少的时间带大家初级入门51单片机。配合巫妖王51单片机开发板,让大家花费少的时间少的钱就能轻松开启单片机学习之路。

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

拿到mt2503的代码,编译后AT指令只能通过虚拟串口发送,需要把虚拟串口转化成普通串口,让单片机能够控制,修改方法如下


 1、 custom\drv\misc_drv\_Default_BB\MT6261\uart_def.c
   UART_flowCtrlMode  UART_GetFlowCtrl(UART_PORT uart_port)
{
 UART_flowCtrlMode flow_ctrl;
 
   switch(uart_port)
   {
      case uart_port1:
#if defined(__EXT_MODEM__) || defined(EMPTY_MMI) //for g+c or modem
flow_ctrl = fc_none;
//fc_hw;
#else
flow_ctrl = fc_none;
#endif
         break;
...............
}

2、hal\peripheral\src\uart.c
void UART_HWInit(UART_PORT port)
{
......................
   /* BaudRate and autoflowcontrol */
   if(port == debug_port)
   {
      DCBdefault->baud = debug_baudrate;
       #if !defined(DRV_UART_SWITCHABLE_BETWEEN_PROCESSORS) && !defined(__MEUT__) && !defined(__MEIT__)  //liming add  for MEUT test(when uart1 as comunication port,can't sw flowcontrol,for testcase19(0x13))
      DCBdefault->flowControl =
 fc_none;//fc_sw;
     #endif
   }
..........
}

3、custom\common\hal\nvram\nvram_data_items.c
static port_setting_struct const NVRAM_EF_PORT_SETTING_DEFAULT[]=
{
........................
    #elif defined(__WIFI_TCPIP_AT_SUPPORT__) || defined(__GPRS_TCPIP_AT_SUPPORT__)||defined(__IPV4V6__)
        #if defined( __WIFI_TCPIP_AT_SUPPORT__)
        4,   /* USB port */
        0,  /* uart_port1 */
        #elif defined (__USB_MULTIPLE_COMPORT_SUPPORT__)
        5,  
        
0,   (0:串口1    4:USB)
        #else
        4,   /* USB port */
        99, 
        #endif
........................
}

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