Ronan Blog

罗华东的博客 | 永远相信美好的事情即将发生

光猫改桥接模式

2024-11-03 Docs Ronan

该例使用 HG6145D 移动光猫(北京烽火终端)

1.获取超级账户和密码

1.1 获取光猫 MAC 地址

在终端输入:

arp -a

或者查看光猫背后名牌。

1.在输出结果中找到192.168.1.1对应的那一行的“物理地址”,这就是MAC地址,形如“ad-jb-26-73-48-c2”。选中后直接按Ctrl+C复制,再粘贴到记事本等文本工具中。 2.把记录的MAC地址全部全部转换为大写字母,并删除所有横杠(“-”),最终得到12位字符(大写字母和数字)的结果,形如“AFJB267348C2”。

注意: 非Windows操作系统用类似方法查询到的MAC地址中的分隔符可能是冒号而不是横杠,且分隔符之间可能只有1位字符,如“C8:6J:12:3:48:C”,这时需要在所有的1位字符前手动补上一个数字0。总之,最终的结果是一串12位的大写字母和数字。

1.2 开启光猫Telnet

在浏览器地址栏输入如下URL,记得在末尾添加刚才得到的经过转换的12位MAC地址(无需引号)。

http:/192.168.1.1/cgi-bin/telnetenable.cgi?telnetenable=1&key=“12位大写字母和数字”

输入的最终URL形如:

http:/192.168.1.1/cgi-bin/telnetenable.cgi?telnetenable=1&key=AFJB267348C2

输入完成后按下回车访问该URL,应该看到“Telenet开启”的提示。若提示错误,请检查输入的url和转换后的MAC地址是否正确。

如遭遇错误, mac 地址如果尾数是0,要加1。


2.通过Telnet获取超级账户名和密码

如果使用 windows ,可能需要提前开启 telnet 功能: 打开开始菜单,搜索“启用或关闭”,在结果中找到“启用或关闭 Windows 功能”并打开,勾选“Telnet客户端”后确定,等待Windows完成Telnet功能的开启。 windows_telnet

在终端输入并回车以下内容并回车:

telnet 192.168.1.1

界面会显示“login:”字样。在其后面输入以下内容并回车:

admin

1.界面会显示“password:”。在其后输入密码,密码为“Fh@”加上刚才转换的MAC地址的后6位,形如“Fh@7348C2”。注意MAC地址的字母在这里同样要大写,且密码输入界面不会显示输入的情况,需要盲打。密码输入完成后回车。 2.界面会显示一个“#”或“$”符号。这时输入如下内容(每输入一行就回车):

load_cli factory
show admin_name
show admin_pwd

得到的结果如下图所示,其中“admin_name=”后面接上的就是超级账户,“admin_pwd=”后面接上的就是超级密码,注意账户名和密码都区分大小写。 su


3.获取宽带账户名和密码

⚠️在没有明确获取宽带账号和密码前,请别急着把光猫改桥接,因为没有宽带账号和密码就无法在路由器拨号上网。后续要找回宽带账号密码比较麻烦。

在安装宽带时,师傅可能只会提供宽带账户名而不告诉宽带密码(理由可能是“现在都是自动下发的”、“我们也不知道”等等)。而更改光猫为桥接后需要在路由器手动拨号上网,这就需要知道宽带密码。可以尝试询问中国移动的宽带客服获取密码,但在拥有光猫的超级账户之后,不用联系客服也能找到记录在光猫中的宽带密码。

1.在浏览器地址栏输入 192.168.1.1 (不同光猫可能地址不同,具体请查看其背后铭牌)并回车,然后用刚才获取到的超级账户登录光猫管理后台。

2.切换到“网络-宽带设置“页面。首先查看 “连接模式” 的模式和 “业务类型” 的类型,如果是 路由管理且处于不能编辑状态,则在 “连接名称” 一个一个切换,直到看到 “连接模式” 中的路由可以编辑以及 “业务类型” 中的类型是 上网 ,此时的 “封装类型” 应该是 PPPoE ,宽带用户名和密码输入框会显示在当前界面。 img

Continue reading

「platformIO」printf 重映像、串口打印数据

2024-10-22 Docs Ronan

keil 环境中使用 printf 通过串口打印数据:

  • 在 main.c 引入stdio.h

  • 重写fputc函数

    // keil arm环境,如果你要用printf函数,就必须重写fputc函数,并且在魔术棒里面勾选使用Micro LIB
    int fputc(int ch, FILE *f)
    {
    	USART_SendData(USART1, ch);
    	while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);//循环的判断串口是否发送完数据
    
    	return ch;
    }
    

    完成以上配置即可在 main 函数中使用 printf 函数通过串口打印数据。

arm-***-gcc 环境使用 printf 通过串口打印数据:

  • 不需要引入stdio.h头文件

  • 直接在 main.c 中重写_write方法即可

    // gcc 编译环境重写该方法
    //这是一种写法
    int _write( int fd, char *pBuffer, int size) {
        for (int i = 0; i < size; i++) {
            while ((USART1->SR&0x40) == 0);		// 等待串口发送完毕
            USART1->DR = (uint8_t) pBuffer[i];
        }
        return size;
    }
    
    //还有另一种写法,根据情况按需选择
    int _write( int fd, char *pBuffer, int size) {
        for (int i = 0; i < size; i++)
    	{
            while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);		// 等待串口发送完毕
            USART1->DR = (uint8_t) pBuffer[i];
        }
        return size;
    }
    

「platformIO」解决 stm32 标准外设库时钟不准的问题

2024-10-22 Docs Ronan

以下以stm32f407系列举例

1.遭遇问题:

在使用 platformIO 搭建标准外设库进行实际开发时遇到了外部时钟不准的问题。

2.原因分析:

这是因为 HSE 的配置有问题,platformIO 自带以及从 ST 官网下载的标准库中的 system_stm32f4xx.cPLL_Mstm32f4xx.h中的 HSE_VALUE默认值与实际开发版的外部晶振频率不一致

3.解决方法

假设当前stm32f407的板子上外部晶振是8MHz(根据自身情况不同)

1.将 platformIO 的安装目录中的 /Users//.platformio/packages/
framework-cmsis-stm32f4/Source/Templates/system_stm32f4xx.c
文件删除。

2.将解压得到的标准库的 …/STM32F4xx_DSP_StdPeriph_Lib_V1.9.0/Project/
STM32F4xx_StdPeriph_Templates/system_stm32f4xx.c
文件复制到
/Users//.platformio/packages/framework-cmsis-stm32f4/
Source/Templates/
目录下。

3.打开 /Users//.platformio/packages/framework-cmsis-stm32f4/
Source/Templates/system_stm32f4xx.c
,在其中搜索到PLL_M

#if defined(STM32F40_41xxx) || defined(STM32F427_437xx) || defined(STM32F429_439xx) || defined(STM32F401xx) || defined(STM32F469_479xx)
 /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */
 #define PLL_M      25

PLL_M 后的25修改为 8

Continue reading
Older posts Newer posts