Beispiel #1
0
/*
 * 说明:硬件复位
 */
static void ICACHE_FLASH_ATTR
TM7705_ResetHard(void)
{
	RESET_1();
	bsp_DelayMS(1);
	RESET_0();
	bsp_DelayMS(2);
	RESET_1();
	bsp_DelayMS(1);
	os_printf("TM7705 Reset!\r\n");
}
/*
*********************************************************************************************************
*	函 数 名: MG323_PowerOn
*	功能说明: 给MG323模块上电
*	形    参: 无
*	返 回 值: 无
*********************************************************************************************************
*/
void MG323_Reset(void)
{
	/*
		根据MG323手册,
		RESET 管脚用于实现模块硬件复位。当模块出现软件死机的情况时,通过拉低
		RESET 管脚 ≥ 10 ms 后,模块进行硬件复位。
	*/
	MG_RESET_0();
	bsp_DelayMS(20);
	MG_RESET_1();
	
	bsp_DelayMS(10);
}
/**
  * @brief  USB_OTG_BSP_mDelay
  *          This function provides delay time in milli sec
  * @param  msec : Value of delay required in milli sec
  * @retval None
  */
void USB_OTG_BSP_mDelay (const uint32_t msec)
{ 
// #ifdef USE_ACCURATE_TIME  
//     BSP_Delay(msec,TIM_MSEC_DELAY);   
// #else
//     USB_OTG_BSP_uDelay(msec * 1000);   
// #endif    
	bsp_DelayMS(msec);
}
/*
*********************************************************************************************************
*	函 数 名: MG323_PowerOn
*	功能说明: 给MG323模块上电
*	形    参: 无
*	返 回 值: 无
*********************************************************************************************************
*/
void MG323_PowerOn(void)
{
	comClearRxFifo(COM_MG323);	/* 清零串口接收缓冲区 */
	
	MG323_Reset();

	/*
		根据MG323手册,模块上电后延迟250ms,然后驱动 TERM_ON口线为低电平 750ms 之后驱动为高,完成开机时序
	*/
	TERM_ON_1();
	bsp_DelayMS(250);

	TERM_ON_0();
	bsp_DelayMS(750);
	TERM_ON_1();	

	/* 等待模块完成上电,判断是否接收到 ^SYSSTART */
	MG323_WaitResponse("^SYSSTART", 5000);
}
/*------------------------------------------------------------
 * Function Name  : SD_EraseFlashOperation
 * Description    : 擦除flash操作
 * Input          : None
 * Output         : None
 * Return         : None
 *------------------------------------------------------------*/
ErrorStatus SD_EraseFlashOperation( uint16_t x, uint16_t y )
{	
	ErrorStatus Err = SUCCESS;
	uint32_t addr = 0;
	const uint8_t ERASE_FLASH_NUM = 3;
	const uint32_t erase_addr[ERASE_FLASH_NUM] = {ADDR_FLASH_SECTOR_5,ADDR_FLASH_SECTOR_6,ADDR_FLASH_SECTOR_7};
	uint8_t i = 0;
	char buff[10];
	uint8_t process = 0;

	lcd_font24(x,y,COLOR_POINT,COLOR_BACK,"> 正在擦除flash...",UPDATE_FONT);
	x += 216;
		
	/* Enable the flash control register access */
	FLASH_Unlock();

	/* Erase the user Flash area ************************************************/
	/* area defined by FLASH_USER_START_ADDR and FLASH_USER_END_ADDR */

	/* Clear pending flags (if any) */  
	FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | 
				  FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR|FLASH_FLAG_PGSERR); 
	
	for (i=0; i<ERASE_FLASH_NUM; ++i)
	{
		/* Get the number of the start and end sectors */
		addr = GetSector(erase_addr[i]);

		/* Device voltage range supposed to be [2.7V to 3.6V], the operation will
		   be done by word */ 
		if (FLASH_EraseSector(addr, VoltageRange_3) != FLASH_COMPLETE)
		{ 
		  /* Error occurred while sector erase. 
			 User can add here some code to deal with this error  */
			Err = ERROR;
			break;
		}
		
		process += 30;
		usprintf(buff,"%3d%%",process);
		lcd_font24(x,y,COLOR_POINT,COLOR_BACK,buff,UPDATE_FONT);
	}
	
	bsp_DelayMS(DELAY_TIME);
	lcd_font24(x,y,COLOR_POINT,COLOR_BACK,"100%",UPDATE_FONT);
	
	FLASH_Lock(); 
	
	return Err;
}
Beispiel #6
0
/*
*********************************************************************************************************
*	函 数 名: bsp_InitTM7705
*	功能说明: 配置STM32的GPIO和SPI接口,用于连接 TM7705
*	形    参: 无
*	返 回 值: 无
*********************************************************************************************************
*/
void ICACHE_FLASH_ATTR
bsp_InitTM7705(void)
{
	bsp_DelayMS(10);

	TM7705_ResetHard();		/* 硬件复位 */

	/*
		在接口序列丢失的情况下,如果在DIN 高电平的写操作持续了足够长的时间(至少 32个串行时钟周期),
		TM7705 将会回到默认状态。
	*/
	bsp_DelayMS(5);

	TM7705_SyncSPI();		/* 同步SPI接口时序 */

	bsp_DelayMS(5);

	/* 配置时钟寄存器 */
	TM7705_WriteByte(REG_CLOCK | WRITE | CH_1);			/* 先写通信寄存器,下一步是写时钟寄存器 */

	TM7705_WriteByte(CLKDIS_0 | CLK_4_9152M | FS_50HZ);	/* 刷新速率50Hz */
	//TM7705_WriteByte(CLKDIS_0 | CLK_4_9152M | FS_500HZ);	/* 刷新速率500Hz */

}
Beispiel #7
0
void BeepInit(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

    GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA,&GPIO_InitStructure);

    GPIO_SetBits(GPIOA, GPIO_Pin_0);
    bsp_DelayMS(200);
    GPIO_ResetBits(GPIOA, GPIO_Pin_0);    
}
Beispiel #8
0
/*
*********************************************************************************************************
*	函 数 名: SIM800_PowerOff
*	功能说明: 控制SIM800模块关机
*	形    参: 无
*	返 回 值: 无
*********************************************************************************************************
*/
void SIM800_PowerOff(void)
{
	/*
	用户可以通过把PWRKEY 信号拉低1.5秒用来关机,拉低时间超过33秒模块会重新开机。
	
	关机过程中,模块首先从网络上注销,让内部软件进入安全状态并且保存相关数据,最后关闭内部电
	源。在最后断电前模块的串口将发送以下字符:
	NORMAL POWER DOWN
	这之后模块将不会执行AT命令。模块进入关机模式,仅RTC处于激活状态。关机模式可以通过
	VDD_EXT引脚来检测,在关机模式下此引脚输出为低电平。
	*/
	
	/* 硬件关机 */
	PWRKEY_0();
	bsp_DelayMS(1500);
	PWRKEY_1();	
		
}
Beispiel #9
0
/*
*********************************************************************************************************
*	函 数 名: TM7705_WaitDRDY
*	功能说明: 等待内部操作完成。 自校准时间较长,需要等待。
*	形    参: 无
*	返 回 值: 无
*********************************************************************************************************
*/
static void ICACHE_FLASH_ATTR
TM7705_WaitDRDY(void)
{
	u32 i;

	for (i = 0; i < 8000; i++){
		if (DRDY_IS_LOW()){
			break;
		}
		//bsp_DelayMS(1);
		os_delay_us(200);
	}

	if (i >= 8000){
		os_printf("TM7705_WaitDRDY() timeout ...\r\n");
		TM7705_SyncSPI();		/* 同步SPI接口时序 */
		bsp_DelayMS(1);
	}
}
Beispiel #10
0
/*
*********************************************************************************************************
*	函 数 名: SIM800_PowerOn
*	功能说明: 模块上电. 函数内部先判断是否已经开机,如果已开机则直接返回1
*	形    参: 无
*	返 回 值: 1 表示上电成功  0: 表示异常
*********************************************************************************************************
*/
uint8_t SIM800_PowerOn(void)
{
	uint8_t ret_value = 0;
	uint8_t i;
	
	/* 判断是否开机 */
	for (i = 0; i < 5; i++)
	{
		SIM800_SendAT("AT");
		if (SIM800_WaitResponse("OK", 100))
		{
			return 1;
		}
	}
	
	comClearRxFifo(COM_SIM800);	/* 清零串口接收缓冲区 */

	/*  通过拉低 PWRKEY 引脚至少 1.2 秒然后释放,使模块开机。*/
	PWRKEY_0();
	bsp_DelayMS(2000);
	PWRKEY_1();

	/* 等待模块完成上电,如果是自动波特率则收不到RDT */
	//if (SIM800_WaitResponse("RDY", 5000) == 0)
	{	
		/* 开始同步波特率: 主机发送AT,只到接收到正确的OK 
		  当模块开机后建议延迟 2 至 3 秒后再发送同步字符,用户可发送“ AT” (大写、小写均可)来和模块
		  同步波特率,当主机收到模块返回“ OK”,			
		*/
		for (i = 0; i < 50; i++)
		{
			SIM800_SendAT("OK");
			if (SIM800_WaitResponse("OK", 100))
			{
				ret_value = 1;
				break;			/* 模块上电成功 */
			}
		}		
	}
	
	return ret_value;
}
/*------------------------------------------------------------
 * Function Name  : UDP_EraseFlashCue
 * Description    : UDPÉý¼¶Ê§°Ü
 * Input          : None
 * Output         : None
 * Return         : None
 *------------------------------------------------------------*/
void UDP_EraseFlashCue( uint8_t process )
{
	char buff[10];
	
	switch ( process )
	{
		case 0: 
			lcd_font24(udp_lcd_x,udp_lcd_y,COLOR_POINT,COLOR_BACK,"> ×¼±¸ÏµÍ³Éý¼¶...",UPDATE_FONT);
			udp_lcd_y += UPDATE_WORD_SIZE + UPDATE_ROW_DISTANCE;
			lcd_font24(udp_lcd_x,udp_lcd_y,COLOR_POINT,COLOR_BACK,"> ÕýÔÚ²Á³ýflash...",UPDATE_FONT);
			break;
		case 100:
			bsp_DelayMS(DELAY_TIME);
			lcd_font24(udp_lcd_x+216,udp_lcd_y,COLOR_POINT,COLOR_BACK,"100%",UPDATE_FONT);
			udp_lcd_y += UPDATE_WORD_SIZE + UPDATE_ROW_DISTANCE;
			break;
		default:
			usprintf(buff,"%3d%%",process);
			lcd_font24(udp_lcd_x+216,udp_lcd_y,COLOR_POINT,COLOR_BACK,buff,UPDATE_FONT);
			break;
	}

}
//LAN8720初始化
//返回值:0,成功;
//    其他,失败
uint8_t bsp_InitLan8720(void)
{
	uint8_t rval=0;
	GPIO_InitTypeDef GPIO_InitStructure;
  
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOC|RCC_AHB1Periph_GPIOB , ENABLE);//使能GPIO时钟 RMII接口
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);   //使能SYSCFG时钟
  
	SYSCFG_ETH_MediaInterfaceConfig(SYSCFG_ETH_MediaInterface_RMII); //MAC和PHY之间使用RMII接口

	/*网络引脚设置 RMII接口 
	  ETH_MDIO -------------------------> PA2
	  ETH_MDC --------------------------> PC1
	  ETH_RMII_REF_CLK------------------> PA1
	  ETH_RMII_CRS_DV ------------------> PA7
	  ETH_RMII_RXD0 --------------------> PC4
	  ETH_RMII_RXD1 --------------------> PC5
	  ETH_RMII_TX_EN -------------------> PB11
	  ETH_RMII_TXD0 --------------------> PB12
	  ETH_RMII_TXD1 --------------------> PB13
	  ETH_RESET-------------------------> PA0*/
					
	  //配置PA1 PA2 PA7
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_7;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;  
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	GPIO_PinAFConfig(GPIOA, GPIO_PinSource1, GPIO_AF_ETH); //引脚复用到网络接口上
	GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_ETH);
	GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_ETH);

	//配置PC1,PC4 and PC5
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5;
	GPIO_Init(GPIOC, &GPIO_InitStructure);
	GPIO_PinAFConfig(GPIOC, GPIO_PinSource1, GPIO_AF_ETH); //引脚复用到网络接口上
	GPIO_PinAFConfig(GPIOC, GPIO_PinSource4, GPIO_AF_ETH);
	GPIO_PinAFConfig(GPIOC, GPIO_PinSource5, GPIO_AF_ETH);
                                
	//配置PG11, PG14 and PG13 
	GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13;
	GPIO_Init(GPIOB, &GPIO_InitStructure);
	GPIO_PinAFConfig(GPIOB, GPIO_PinSource11, GPIO_AF_ETH);
	GPIO_PinAFConfig(GPIOB, GPIO_PinSource12, GPIO_AF_ETH);
	GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_ETH);
	
	//配置PD3为推完输出
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;	//推完输出
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;  
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	LAN8720_CLR;					//硬件复位LAN8720
	bsp_DelayMS(50);	
	LAN8720_SET;				 	//复位结束 
	ETHERNET_NVICConfiguration();
	rval=ETH_MACDMA_Config();
	return !rval;					//ETH的规则为:0,失败;1,成功;所以要取反一下 
}
Beispiel #13
0
/**
  * @brief  USB_OTG_BSP_mDelay
  *          This function provides delay time in milli sec
  * @param  msec : Value of delay required in milli sec
  * @retval None
  */
void USB_OTG_BSP_mDelay (const uint32_t msec)
{
	bsp_DelayMS(msec);
}
/*------------------------------------------------------------
 * Function Name  : SD_UpDate
 * Description    : SD卡升级
 * Input          : None
 * Output         : None
 * Return         : None
 *------------------------------------------------------------*/
ErrorStatus SD_UpDate( void )
{
	char version[50];
	uint16_t x = UPDATE_WORD_START_X;
	uint16_t y = UPDATE_WORD_START_Y;
	
	lcd_clear(COLOR_BACK);
	
	lcd_font24(x,y,COLOR_POINT,COLOR_BACK,"========================================",UPDATE_FONT);
	y += UPDATE_WORD_SIZE + UPDATE_ROW_DISTANCE;
	lcd_font24(x,y,COLOR_POINT,COLOR_BACK,"         > 欢迎使用SD卡升级系统 <",UPDATE_FONT);
	y += UPDATE_WORD_SIZE + UPDATE_ROW_DISTANCE;
	strcpy(version,"         > ");
	strcat(version,SOFT_VERSION);
	lcd_font24(x,y,COLOR_POINT,COLOR_BACK,version,UPDATE_FONT);
	y += UPDATE_WORD_SIZE + UPDATE_ROW_DISTANCE;
	lcd_font24(x,y,COLOR_POINT,COLOR_BACK,"========================================",UPDATE_FONT);
	y += UPDATE_WORD_SIZE + UPDATE_ROW_DISTANCE;
	
	lcd_font24(x,y,COLOR_POINT,COLOR_BACK,"> 正在查找SD卡升级文件...",UPDATE_FONT);
	bsp_DelayMS(DELAY_TIME);
	
	y += UPDATE_WORD_SIZE + UPDATE_ROW_DISTANCE;
	
	if (Check_SD_UpdateFileExist() == NO)
	{
		lcd_font24(x,y,COLOR_POINT,COLOR_BACK,"> 未找到升级文件!",UPDATE_FONT);
		y += UPDATE_WORD_SIZE + UPDATE_ROW_DISTANCE;
		lcd_font24(x,y,COLOR_POINT,COLOR_BACK,"> 升级失败!",UPDATE_FONT);
		return ERROR;
	}
	
	lcd_font24(x,y,COLOR_POINT,COLOR_BACK,"> 准备系统升级...",UPDATE_FONT);
	bsp_DelayMS(DELAY_TIME);
	y += UPDATE_WORD_SIZE + UPDATE_ROW_DISTANCE;
	
	if (ERROR == SD_EraseFlashOperation(x,y))
	{
		y += UPDATE_WORD_SIZE + UPDATE_ROW_DISTANCE;
		lcd_font24(x,y,COLOR_POINT,COLOR_BACK,"> 擦除flash失败!",UPDATE_FONT);
		y += UPDATE_WORD_SIZE + UPDATE_ROW_DISTANCE;
		lcd_font24(x,y,COLOR_POINT,COLOR_BACK,"> 升级失败!",UPDATE_FONT);
		return ERROR;
	}
	y += UPDATE_WORD_SIZE + UPDATE_ROW_DISTANCE;
	
	lcd_font24(x,y,COLOR_POINT,COLOR_BACK,"> 正在写入文件...",UPDATE_FONT);
	bsp_DelayMS(DELAY_TIME);
	y += UPDATE_WORD_SIZE + UPDATE_ROW_DISTANCE;
	
	if (ERROR == SD_UpdateExecute(x,y))
	{
		return ERROR;
	}
	y += UPDATE_WORD_SIZE + UPDATE_ROW_DISTANCE;
	
	lcd_font24(x,y,COLOR_POINT,COLOR_BACK,"> 升级成功!",UPDATE_FONT);
	y += UPDATE_WORD_SIZE + UPDATE_ROW_DISTANCE;
	
	AutoEnterSystemCue(x,y,COLOR_POINT,COLOR_BACK,UPDATE_FONT);
	
	return SUCCESS;
}