sync
sync
This guy hasn't written anything yet

注册于 2 years ago

回答
126
文章
3
关注者
2

自己看下drv_flash_fx.c就明白了

  • onchip_flash_16k,
  • onchip_flash_64k,
  • onchip_flash_128k

分别对应的不同的内部flash空间,使用不同的读写函数

const struct fal_flash_dev stm32f2_onchip_flash= { "stm32_onchip", 0x08000000, 1024*1024, (128 * 1024), {NULL, fal_flash_read_128k, fal_flash_write_128k, fal_flash_erase_128k} };
const struct fal_flash_dev stm32_onchip_flash_16k = { "onchip_flash_16k", STM32_FLASH_START_ADRESS_16K, FLASH_SIZE_GRANULARITY_16K, (16 * 1024), {NULL, fal_flash_read_16k, fal_flash_write_16k, fal_flash_erase_16k} };
const struct fal_flash_dev stm32_onchip_flash_64k = { "onchip_flash_64k", STM32_FLASH_START_ADRESS_64K, FLASH_SIZE_GRANULARITY_64K, (64 * 1024), {NULL, fal_flash_read_64k, fal_flash_write_64k, fal_flash_erase_64k} };
const struct fal_flash_dev stm32_onchip_flash_128k = { "onchip_flash_128k", STM32_FLASH_START_ADRESS_128K, FLASH_SIZE_GRANULARITY_128K, (128 * 1024), {NULL, fal_flash_read_128k, fal_flash_write_128k, fal_flash_erase_128k} };

先直接让电脑的串口连接PA9、PA10,看msh终端是否正常。
如果这样没问题,就检查蓝牙模块吧
如果有问题,就检查串口引脚配置或程序吧

楼主要明白stm32是如果存储数据的,搞清楚大小端,就知道为啥数据是反的

rt_can_msg_t是指针,所以。。。。

struct rt_can_msg
{
    rt_uint32_t id  : 29;
    rt_uint32_t ide : 1;
    rt_uint32_t rtr : 1;
    rt_uint32_t rsv : 1;
    rt_uint32_t len : 8;
    rt_uint32_t priv : 8;
    rt_uint32_t hdr : 8;
    rt_uint32_t reserved : 8;
    rt_uint8_t data[8];
};
typedef struct rt_can_msg *rt_can_msg_t;

在fal_cfg.h文件里面定义,打开这个头文件就看到了

看这个回调函数,connect_status就是U盘的连接状态

void HAL_HCD_Connect_Callback(HCD_HandleTypeDef *hhcd)
{
    uhcd_t hcd = (uhcd_t)hhcd->pData;
    if (!connect_status)
    {
        connect_status = RT_TRUE;
        RT_DEBUG_LOG(1, ("usb connected\n"));
        rt_usbh_root_hub_connect_handler(hcd, OTG_FS_PORT, RT_FALSE);
    }
}
void HAL_HCD_Disconnect_Callback(HCD_HandleTypeDef *hhcd)
{
    uhcd_t hcd = (uhcd_t)hhcd->pData;
    if (connect_status)
    {
        connect_status = RT_FALSE;
        RT_DEBUG_LOG(1, ("usb disconnnect\n"));//RT_DEBUG_USB
        rt_usbh_root_hub_disconnect_handler(hcd, OTG_FS_PORT);
    }
}

你的波特率是多少?写入到外部flash的时间是多少?第一次80K数据接收完毕,和第二次80k数据开始接收之间的间隔时间是多少?

中断里面,使用延时是不合适的,修改下程序吧

应该先ping下,看看和192.168.1.103是否能够ping 通?

是的,关于虚拟文件系统的理解可以看这两个图片

输入链接说明
输入链接说明

可以参考RT-thread对串口的处理方式,使用消息队列来实现数据传递

/* 接收数据回调函数 */
static rt_err_t uart_input(rt_device_t dev, rt_size_t size)
{
    struct rx_msg msg;
    rt_err_t result;
    msg.dev = dev;
    msg.size = size;

    result = rt_mq_send(&rx_mq, &msg, sizeof(msg));
    if (result == -RT_EFULL)
    {
        /* 消息队列满 */
        LOG_E("message queue full!");
    }

    return result;
}

回到
顶部

发布
问题

投诉
建议