导航

    Freqchip开发者论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 最新
    1. 主页
    2. Mars
    3. 主题
    M
    • 继续与 Mars 聊天
    • 开始与 Mars 的新会话
    • 举报资料
    • 资料
    • 关注
    • 粉丝
    • 屏蔽
    • 主题
    • 帖子
    • 最佳
    • 群组

    Mars 创建的主题

    • M

      FR802x 第一次能开机有日志,复位或者重启之后不能跑起来,115200波特率有freqchi
      FR802x • • Mars

      2
      0
      赞同
      2
      帖子
      106
      浏览

      M

      检查一下固件的大小是否大于flashDB的操作空间 检查flashDB设置flash的大小 检查OTA设置的B区起始地址 举例假设使用的是FR5098芯片flash为2M,设置ota_get_start_address的start_address为512K+8K是B区OTA的起始地址,那么用户储存区地址就是512k+512k+8k开始到到0x1FD000之前为用户区,然后flashDB的操作地址也应该是512k+512k+8k之后到0x1FD000之前都是可以操作的
    • M

      FR800x-U加强版的的 SARADC怎么使用
      FR800x • • Mars

      2
      0
      赞同
      2
      帖子
      115
      浏览

      M

      使用的是内部1.2V的基准源,外部进行300K+100K分压,io口最高承受3.6V,-u版本的IOLDO参考源末端线性不准所以不建议使用外部3.3V的基准源 /* ****************************************************************************** * @file saradc_demo.c * @author FreqChip Firmware Team * @version V1.0.0 * @date 2025 * @brief SARADC demo based on driver_adc_pro. * * 与旧 ADC(driver_adc / adc_demo)的区别: * 1. 旧 ADC 引脚通道硬件固定,PD1 = AuxADC6 / ADC_CHANNEL_6 * (见 driver_gpio.h PortD MUX 的 GPIO_FUNCTION_8)。 * 2. SARADC 的 SARADC_CHANNEL_0~9 是逻辑通道,不绑死引脚。 * 采哪根脚由 ch_map_p 决定,PD1 对应 ADC_CH_MAP_PORTD_1。 * 3. loop_max_channel = N 时,硬件只轮询 CHANNEL_0 ~ CHANNEL_(N-1)。 * 单通道必须用 SARADC_CHANNEL_0,不能配 CHANNEL_1/6。 * 4. saradc_get_channel_data() 返回 10bit 原始码 (0~1023),需自行换算。 * * 电压换算(10bit): * Vpin(mV) = raw * Vref(mV) / 1024 * Vin(mV) = Vpin * 外部分压比 * 本板 PD1 有外部 4 分 1 电阻,1.2V 参考: * Vin(mV) = raw * 1200 * 4 / 1024 * 外部已分压时,内部 ATT 必须 BYPASS,否则会分压两次。 ****************************************************************************** */ #include "saradc_demo.h" #include "driver_gpio.h" #include "driver_pmu.h" #include "driver_adc_pro.h" #include "driver_system.h" #include "co_printf.h" #include "co_log.h" /* 10bit:Vin(mV) = raw * 参考电压(mV) * 分压比 / 1024 */ #define SARADC_RAW_TO_MV(raw, vref_mv, div) (((uint32_t)(raw) * (vref_mv) * (div)) / 1024) /** * @brief 把 GPIO 配成模拟输入:输入、无上下拉。 * SARADC 通过 ch_map_p 选脚,不再需要旧 ADC 的 GPIO_FUNCTION_8。 */ static void saradc_gpio_analog_init(enum_GPIOx_t port, uint32_t pin) { GPIO_InitTypeDef GPIO_Handle; GPIO_Handle.Pin = pin; GPIO_Handle.Mode = GPIO_MODE_INPUT; /* 模拟输入 */ GPIO_Handle.Pull = GPIO_NOPULL; /* 禁止上下拉,避免拉偏采样 */ gpio_init(port, &GPIO_Handle); } /** * @brief SARADC 公共初始化。 * 内部 1.2V 参考;clock_div 必须为偶数;sampling_cycle 建议 15。 */ static void saradc_common_init(saradc_InitConfig_t *Init) { Init->saradc_reference = SARADC_REF_INTERNAL_1P2V; /* 内部 1.2V 基准 */ Init->saradc_clock_div = 2; /* 采样时钟分频,最小 2 */ Init->saradc_sampling_cycle = 15; /* 采样周期,1~16 */ saradc_init(Init); } /************************************************************************************ * @fn saradc_demo * * @brief SARADC demo based on driver_adc_pro. * * @param fe_Demo: demo select. */ void saradc_demo(enum_SARADC_Demo_t fe_Demo) { saradc_InitConfig_t saradc_InitConfig; saradc_LoopConfig_t LoopConfig; saradc_ChannelConfig_t ChannelConfig; uint16_t raw; __SYSTEM_ADC_CLK_ENABLE(); /* 打开 ADC/SARADC 时钟 */ __SYSTEM_GPIO_CLK_ENABLE(); /* 打开 GPIO 时钟,才能配引脚 */ switch (fe_Demo) { /* * 单通道:采 PD1。 * 逻辑通道用 CHANNEL_0(loop_max=1 只转 CH0)。 * 引脚用 ADC_CH_MAP_PORTD_1,不是旧的 ADC_CHANNEL_6。 * 外部已有 4 分 1,内部 ATT 旁路。 */ case SARADC_DEMO_SINGLE_CHANNEL: { saradc_gpio_analog_init(GPIO_D, GPIO_PIN_1); saradc_common_init(&saradc_InitConfig); LoopConfig.loop_max_channel = 1; /* 只转 CH0 */ LoopConfig.loop_interval_mode = SARADC_INTVL_DISABLE; /* 通道间不插间隔 */ LoopConfig.loop_interval_len = 0; LoopConfig.loop_FIFO_enable = SARADC_FUNC_DISABLE; /* 不用 FIFO,读通道寄存器 */ LoopConfig.loop_FIFO_channel_sel = 0; LoopConfig.loop_FIFO_almost_threshold = 0; saradc_loop_config(&LoopConfig); ChannelConfig.ch_mode = SARADC_CH_MODE_SINGLE; /* 单端 */ ChannelConfig.ch_map_p = ADC_CH_MAP_PORTD_1; /* 正极接到 PD1 */ ChannelConfig.ch_map_n = ADC_CH_MAP_VSSA; /* 负极接模拟地 */ ChannelConfig.ch_voltage_divider = SARADC_VOLTAGE_DIVIDER_BYPASS;/* 内部不再分压 */ ChannelConfig.ch_source_follower_en = SARADC_FUNC_DISABLE; saradc_channel_config(SARADC_CHANNEL_0, &ChannelConfig); saradc_loop_convert_start(); /* 启动循环转换 */ co_delay_100us(1500); /* 等待模拟建立 */ co_printf("SDK V1.5 SARADC start\r\n"); while (1) { /* 该逻辑通道转换完成才会置位 */ if (saradc_get_channel_valid_status(SARADC_CHANNEL_0)) { raw = saradc_get_channel_data(SARADC_CHANNEL_0); /* 10bit raw */ /* 1.2V 参考 + 外部 4 分 1:Vin = raw * 1200 * 4 / 1024 */ co_printf("SDK V1.5 SARADC raw=%d, mv=%d\r\n", raw, SARADC_RAW_TO_MV(raw, 1200, 4)); } co_delay_100us(2000); } } /* * 多通道:PD0~PD3 映射到逻辑 CH0~CH3。 * loop_max_channel 必须等于实际通道数 4,否则后面的通道不会转换。 */ case SARADC_DEMO_MULTI_CHANNEL: { saradc_gpio_analog_init(GPIO_D, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3); saradc_common_init(&saradc_InitConfig); LoopConfig.loop_max_channel = 4; /* 转 CH0~CH3 */ LoopConfig.loop_interval_mode = SARADC_INTVL_DISABLE; LoopConfig.loop_interval_len = 0; LoopConfig.loop_FIFO_enable = SARADC_FUNC_DISABLE; LoopConfig.loop_FIFO_channel_sel = 0; LoopConfig.loop_FIFO_almost_threshold = 0; saradc_loop_config(&LoopConfig); ChannelConfig.ch_mode = SARADC_CH_MODE_SINGLE; ChannelConfig.ch_map_n = ADC_CH_MAP_VSSA; ChannelConfig.ch_voltage_divider = SARADC_VOLTAGE_DIVIDER_0P25; /* 内部 1/4,无外部分压时可用 */ ChannelConfig.ch_source_follower_en = SARADC_FUNC_DISABLE; ChannelConfig.ch_map_p = ADC_CH_MAP_PORTD_0; saradc_channel_config(SARADC_CHANNEL_0, &ChannelConfig); ChannelConfig.ch_map_p = ADC_CH_MAP_PORTD_1; saradc_channel_config(SARADC_CHANNEL_1, &ChannelConfig); ChannelConfig.ch_map_p = ADC_CH_MAP_PORTD_2; saradc_channel_config(SARADC_CHANNEL_2, &ChannelConfig); ChannelConfig.ch_map_p = ADC_CH_MAP_PORTD_3; saradc_channel_config(SARADC_CHANNEL_3, &ChannelConfig); saradc_loop_convert_start(); while (1) { for (int i = 0; i < 4; i++) { if (saradc_get_channel_valid_status((enum_saradc_channel_t)i)) { raw = saradc_get_channel_data((enum_saradc_channel_t)i); co_printf("CH[%d] raw=%d, mv=%d\r\n", i, raw, SARADC_RAW_TO_MV(raw, 1200, 4)); } } co_delay_100us(2000); } } /* * 内部 1/4 VBAT。 * 模拟前端已做电池分压,通道 ATT 旁路;换算时再 *4 得到 VBAT。 */ case SARADC_DEMO_VBAT: { saradc_common_init(&saradc_InitConfig); saradc_vbat_measure_enable(); /* 打开内部 VBAT 分压电路 */ LoopConfig.loop_max_channel = 1; LoopConfig.loop_interval_mode = SARADC_INTVL_DISABLE; LoopConfig.loop_interval_len = 0; LoopConfig.loop_FIFO_enable = SARADC_FUNC_DISABLE; LoopConfig.loop_FIFO_channel_sel = 0; LoopConfig.loop_FIFO_almost_threshold = 0; saradc_loop_config(&LoopConfig); ChannelConfig.ch_mode = SARADC_CH_MODE_SINGLE; ChannelConfig.ch_map_p = ADC_CH_MAP_VBAT; /* 内部 VBAT */ ChannelConfig.ch_map_n = ADC_CH_MAP_VSSA; ChannelConfig.ch_voltage_divider = SARADC_VOLTAGE_DIVIDER_BYPASS; ChannelConfig.ch_source_follower_en = SARADC_FUNC_DISABLE; saradc_channel_config(SARADC_CHANNEL_0, &ChannelConfig); saradc_loop_convert_start(); while (1) { if (saradc_get_channel_valid_status(SARADC_CHANNEL_0)) { raw = saradc_get_channel_data(SARADC_CHANNEL_0); co_printf("1/4 VBAT raw=%d, vbat=%d mV\r\n", raw, SARADC_RAW_TO_MV(raw, 1200, 4)); } co_delay_100us(2000); } } /* * 核温 VBE,无外部分压,换算比取 1。 */ case SARADC_DEMO_VBE: { saradc_common_init(&saradc_InitConfig); saradc_vbe_measure_enable(); /* 打开内部温度传感 */ LoopConfig.loop_max_channel = 1; LoopConfig.loop_interval_mode = SARADC_INTVL_DISABLE; LoopConfig.loop_interval_len = 0; LoopConfig.loop_FIFO_enable = SARADC_FUNC_DISABLE; LoopConfig.loop_FIFO_channel_sel = 0; LoopConfig.loop_FIFO_almost_threshold = 0; saradc_loop_config(&LoopConfig); ChannelConfig.ch_mode = SARADC_CH_MODE_SINGLE; ChannelConfig.ch_map_p = ADC_CH_MAP_VBEP; /* VBE 正极 */ ChannelConfig.ch_map_n = ADC_CH_MAP_VSSA; ChannelConfig.ch_voltage_divider = SARADC_VOLTAGE_DIVIDER_BYPASS; ChannelConfig.ch_source_follower_en = SARADC_FUNC_DISABLE; saradc_channel_config(SARADC_CHANNEL_0, &ChannelConfig); saradc_loop_convert_start(); while (1) { if (saradc_get_channel_valid_status(SARADC_CHANNEL_0)) { raw = saradc_get_channel_data(SARADC_CHANNEL_0); co_printf("VBE raw=%d, mv=%d\r\n", raw, SARADC_RAW_TO_MV(raw, 1200, 1)); } co_delay_100us(2000); } } default: break; } }
    • M

      FR802x串口接收超时
      FR802x • • Mars

      4
      0
      赞同
      4
      帖子
      1712
      浏览

      M

    • M

      FR802x原始SDK的USB无法识别的问题
      FR802x • • Mars

      2
      0
      赞同
      2
      帖子
      807
      浏览

      M

      修改办法参考上面
    • M

      芯片低功耗的方式
      FR800x • • Mars

      2
      0
      赞同
      2
      帖子
      2539
      浏览

      M

      //设置唤醒的io口 void pmu_port_wakeup_func_set(enum system_port_t port, uint8_t bits) //设置取消唤醒的io口 void pmu_port_wakeup_func_clear(enum system_port_t port, uint8_t bits)
    • M

      FR303x 连接之后,如果你想一包数据不分包发送最大值要怎么修改?
      FR303x • • Mars

      3
      0
      赞同
      3
      帖子
      3890
      浏览

      M

      125K(LE Coded S=8)下还是走 DLE 的同一套规则: tx_octets 的上限依然是 251(LL 层单包最大负载)。 tx_time 是“单包最大发送时长(us)”,需要按所用 PHY 的比特率估算。 一个好用的近似公式(够工程使用): tx_time(µs) ≈ (tx_octets + 14) * 8 / R ,R 为 Mbps(1M=1,2M=2,500K=0.5,125K=0.125) “+14”是 LL 层头部等开销的常用近似。 以 tx_octets=251 估算得到常用值(四舍五入): PHY 估算 tx_time 1M ≈ 2120 µs 2M ≈ 1060 µs 125K(S=8) ≈ 16960 µs 500K(S=2) ≈ 4240 µs 你的需求:想一次发送 512 字节 LL 层单包最多 251B,所以 必须分成两包(DLE 只是把单包上限提到 251B)。 若想在 ATT 层“一次性”写 512B,还需要 把 MTU 提到 ≥517(ATT 可载荷=MTU-3=512B),底层依然会拆成两包 LL PDU 发送。 125K(S=8)下的调用示例 gap_ll_pkt_size_exchange_req_t req = { .conidx = 0, // 你的连接索引 .tx_octets = 251, // LL 单包最大负载上限 .tx_time = 16960, // 125K 估算值(微秒) }; ble_api_err_t err = gap_ll_pkt_size_exchange_req(&req); if (err != BLE_API_OK) { // 处理错误 } 实战提示 有的控制器会自己协商到双方都能接受的最大值;tx_time 宁可略大不要偏小,125K 下给 17000~18000 µs 也常见。 记得在建立连接后:先做 ATT MTU 交换(≥517)→ 再做 DLE(251/16960),最后再发 512B 的应用数据。 若用 500K(S=2),把 tx_time 改成 ≈ 4240 µs 即可,tx_octets 仍为 251。
    • M

      FR303x BLE的定向广播
      FR303x • • Mars

      2
      0
      赞同
      2
      帖子
      3826
      浏览

      M

      定向广播请参考 【有道云笔记】FR303x ble定向广播 https://note.youdao.com/s/aGqlaeTZ
    • M

      FR800x ADC怎么使用
      FR800x • • Mars

      2
      0
      赞同
      2
      帖子
      3581
      浏览

      M

      【有道云笔记】FR800x之ADC https://note.youdao.com/s/c4NnuL7I
    • M

      FR800x Flash根据对应型号修改对应大小
      FR800x • • Mars

      2
      0
      赞同
      2
      帖子
      3868
      浏览

      M

      答:修改对应app_config.h文件 // <h> FLASH Configuration // <o> FLASH_CAPACITY // <i> Internal Flash capacity selection, Default: 4Mb // <0x02000000=> 128Mb // <0x01000000=> 64Mb // <0x00800000=> 32Mb // <0x00100000=> 8Mb // <0x00080000=> 4Mb // <0x00040000=> 2Mb #define FLASH_CAPACITY 0x02000000 #define BLE_STACK_KEY_STORAGE_OFFSET (FLASH_CAPACITY-0x1000) #define BLE_REMOTE_SERVICE_SAVE_ADDR (FLASH_CAPACITY-0x2000) #define BLE_BONDING_INFO_SAVE_ADDR (FLASH_CAPACITY-0x3000)
    • M

      富芮坤芯片串口下载最新工具
      FR801xH • • Mars

      1
      1
      赞同
      1
      帖子
      5488
      浏览

      尚无回复

    • M

      FR8000 USB CDC
      FR800x • • Mars

      3
      0
      赞同
      3
      帖子
      10335
      浏览

      M

      【有道云笔记】FR8000-usb https://note.youdao.com/s/SfN8dW10
    • M

      FR8000-PMU控制PD5口输入输出
      FR800x • • Mars

      2
      0
      赞同
      2
      帖子
      6949
      浏览

      M

      IO口知识点 请参考
    • M

      uart0 输出日志的同时使用uart isr+芯片唯一id作为mac地址
      FR800x • • Mars

      1
      0
      赞同
      1
      帖子
      4679
      浏览

      尚无回复

    • M

      FR8000操作flash
      FR800x • • Mars

      4
      0
      赞同
      4
      帖子
      16044
      浏览

      0

      @mars FR8008GP 的flash能读 但是擦除和写不行
    • M

      gpio外部中断exti_isr
      FR800x • • Mars

      4
      0
      赞同
      4
      帖子
      12069
      浏览

      S

      外部中断exti使用是有例程的,参考\examples\none_evm\peripheral_demo\gpio
    • M

      OTA 失败 修改固件区大小
      FR801xH • • Mars

      2
      0
      赞同
      2
      帖子
      8279
      浏览

      7

      请问下FR8008的OTA和FR801XH一样吧,我想通过串口OTA升级固件要怎么处理呢,看了文档将待升级固件写入B区域,固件配置信息要怎么写还不是太明白,比如那些有效标识、写保护配置等,串口接收的固件写入B区域后,前面的B区域固件配置信息要如何写,有没有详细一点的说明或者示例。
    • M

      FR8000串口接收例程
      FR800x • • Mars

      2
      0
      赞同
      2
      帖子
      9188
      浏览

      M

      void uart1_isr_int(UART_HandleTypeDef *huart) { huart->UARTx->IER_DLH.IER.ELSI = 1; huart->UARTx->IER_DLH.IER.ERBFI = 1; }
    • M

      FR801xH串口接收方式-硬件定时器超时判断断帧
      FR801xH • • Mars

      2
      0
      赞同
      2
      帖子
      7534
      浏览

      M

      @mars 有疑问的同学,我知道的可以向你解答