发新帖我要提问
12
返回列表
打印
[其他ST产品]

STM32F401CCU6移植华为LiteOS

[复制链接]
楼主: 自动化陈稳
手机看帖
扫描二维码
随时随地手机跟帖
21
自动化陈稳|  楼主 | 2022-11-28 23:56 | 只看该作者 回帖奖励 |倒序浏览
在STM32F401_CCU6/Src/tim.c中,添加以下代码
#include "sys_init.h"
#include "los_hwi.h"
VOID TimInit(VOID)
{
    MX_TIM3_Init();
}
VOID TimerHwiCreate(VOID)
{
    UINT32 ret;

    ret = LOS_HwiCreate(TIM_IRQ, 0, 0, TIM3_IRQHandler, 0); // 16: cortex-m irq num shift
    if (ret != 0) {
        printf("ret of TIM3 LOS_HwiCreate = %#x\n", ret);
        return;
    }
    HAL_TIM_Base_Start_IT(&htim3);
}
UINT64 GetTimerCycles(VOID)
{
    static UINT64 bacCycle;
    static UINT64 cycleTimes;
    UINT64 cycles = 0;
    UINT64 swCycles = htim3.Instance->CNT;

    if (swCycles < bacCycle) {
        cycleTimes++;
    }

    bacCycle = swCycles;
    cycles = swCycles + cycleTimes * TIMER3_RELOAD;

    return cycles;
}
TimControllerOps g_cpupTimerOps = {
    .timInit = TimInit,
    .timHwiCreate = TimerHwiCreate,
    .timGetTimerCycles = GetTimerCycles
};
:

使用特权

评论回复
22
自动化陈稳|  楼主 | 2022-11-28 23:56 | 只看该作者
在STM32F401_CCU6/Inc/gpio.h中,添加以下代码

#include "stm32f4xx_hal.h"
1
在STM32F401_CCU6/Inc/usart.h中,添加以下代码:

#include "stm32f4xx_hal.h"
#include "los_typedef.h"
#include "uart.h"
extern UartControllerOps g_genericUart;

使用特权

评论回复
23
自动化陈稳|  楼主 | 2022-11-28 23:57 | 只看该作者
在STM32F401_CCU6/Src/usart.c中,添加以下代码
VOID UsartInit(VOID)
{
    MX_USART1_UART_Init();
}
VOID UsartWrite(const CHAR c)
{
    (VOID)HAL_UART_Transmit(&huart1, (UINT8 *)&c, 1, DEFAULT_TIMEOUT);
}
UINT8 UsartRead(VOID)
{
    UINT8 ch;
    (VOID)HAL_UART_Receive(&huart1, &ch, sizeof(UINT8), 0);
    return ch;
}
STATIC VOID UartHandler(VOID)
{
    (VOID)uart_getc();
}
INT32 UsartHwi(VOID)
{
    if (huart1.Instance == NULL) {
        return LOS_NOK;
    }
    HAL_NVIC_EnableIRQ(USART1_IRQn);
    __HAL_UART_CLEAR_FLAG(&huart1, UART_FLAG_TC);
    (VOID)LOS_HwiCreate(NUM_HAL_INTERRUPT_UART, 0, 0, UartHandler, NULL);
    __HAL_UART_ENABLE_IT(&huart1, UART_IT_RXNE);
    return LOS_OK;
}
UartControllerOps g_genericUart = {
    .uartInit = UsartInit,
    .uartWriteChar = UsartWrite,
    .uartReadChar = UsartRead,
    .uartHwiCreate = UsartHwi
};

使用特权

评论回复
24
自动化陈稳|  楼主 | 2022-11-28 23:57 | 只看该作者
修改链接脚本,注意要先改完裸板程序中的.ld文件才能用裸板程序中的.ld文件替代LiteOS文件,在裸板程序的.ld文件中添加以下字段

/* used by the startup to initialize liteos vector */
_si_liteos_vector_data = LOADADDR(.vector_ram);

/* Initialized liteos vector sections goes into RAM, load LMA copy after code */
.vector_ram :
{
. = ORIGIN(RAM);
_s_liteos_vector = .;
*(.data.vector)    /* liteos vector in ram */
_e_liteos_vector = .;
} > RAM AT> FLASH
1
2
3
4
5
6
7
8
9
10
11
. = ALIGN(8);
__los_heap_addr_start__ = .;
__los_heap_addr_end__ = ORIGIN(RAM) + LENGTH(RAM) - _Min_Stack_Size - 1;
1
2
3
注意要对着原来的liteos.ld文件将字段放在合适的位置。

使用特权

评论回复
25
自动化陈稳|  楼主 | 2022-11-28 23:58 | 只看该作者
修改配置文件
修改STM32F401_CCU6/Makefile文件,找到USER_SRC字段,在字段中添加跟其他语句一样的一句

$(LITEOSTOPDIR)/targets/$(LITEOS_PLATFORM)/Src/gpio.c
1
注意换行要用“\”符号添加在末尾,如果gpio.c已经添加,也可以将自己写的.c文件放进去,编译时会一同编译,USER_INC字段同理,为引入的头文件。

找到targets/bsp目录下的Makefile文件中

else ifeq ($(LOSCFG_PLATFORM_STM32F407_ATK_EXPLORER), y)
1
复制一份放置在下一个else ifeq前面,将其中的LOSCFG_PLATFORM_STM32F407_ATK_EXPLORER改成LOSCFG_PLATFORM_STM32F401_CCU6,STM32F407ZGTX_HAL_SRC改成

使用特权

评论回复
26
自动化陈稳|  楼主 | 2022-11-28 23:58 | 只看该作者
STM32F401_CCU6_HAL_SRC,修改完成的代码如下

else ifeq ($(LOSCFG_PLATFORM_STM32F401_CCU6), y)
STM32F401_CCU6_HAL_SRC = \
    drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c \
    drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.c \
    drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c \
    drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c \
    drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c \
    drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c \
    drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c \
    drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c \
    drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c \
    drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c \
    drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c \
    drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c \
    drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c \
    drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c \
    drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c \
    drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_iwdg.c \
    drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c \
    drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c \
    drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c \
    drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_eth.c \
    drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rng.c
    LOCAL_SRCS = $(STM32F401_CCU6_HAL_SRC)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
保存后退出。
修改targets/bsp.mk文件,找到STM32F407_ATK_Explorer Options这个字段的代码,拷贝一份粘贴在下方另一个Opitons上面,修改其中的STM32F407_ATK_EXPLORER为STM32F401_CCU6,STM32F407xx为STM32F401xC,修改后代码如下

######################### STM32F401_CCU6 Options #######################
else ifeq ($(LOSCFG_PLATFORM_STM32F401_CCU6), y)
    LITEOS_CMACRO_TEST += -DSTM32F401xc
    HAL_DRIVER_TYPE := STM32F4xx_HAL_Driver

使用特权

评论回复
27
自动化陈稳|  楼主 | 2022-11-28 23:59 | 只看该作者
修改targets/Kconfig.stm32文件,在config LOSCFG_PLATFORM字段下添加

    default "STM32F401_CCU6"            if LOSCFG_PLATFORM_STM32F401_CCU6
1
STM32F401_CCU6是文件夹的名字,LOSCFG_PLATFORM_STM32F401_CCU6字段是前面步骤中填写的字段。在下面的choice中的help字段中添加

STM32F401_CCU6
1
在往下的字段中添加代码

config LOSCFG_PLATFORM_STM32F401_CCU6
    bool "STM32F401_CCU6"
    select LOSCFG_USING_BOARD_LD
    select LOSCFG_ARCH_CORTEX_M4
    select LOSCFG_CORTEX_M_NVIC
    select LOSCFG_CORTEX_M_SYSTICK
    select LOSCFG_DRIVER_HAL_LIB
1
2
3
4
5
6
7
在tool/build/config中复制一份STM32F407_ATK_Explorer.config并重命名为STM32F401_CCU6.config,将STM32F401_CCU6.config中的STM32F407_ATK_EXPLORER替换为STM32F401_CCU6字段。将STM32F401_CCU6.config拷贝到LiteOS主目录下,并修改成.config名字。

使用特权

评论回复
28
童雨竹| | 2024-11-8 07:10 | 只看该作者

宽度则与电感量和电阻量成反比

使用特权

评论回复
29
Wordsworth| | 2024-11-8 08:13 | 只看该作者

电流要增大

使用特权

评论回复
30
Clyde011| | 2024-11-8 09:16 | 只看该作者

整流器或功率开关管与每个电容端的连线长度和宽度都要一样

使用特权

评论回复
31
公羊子丹| | 2024-11-8 10:09 | 只看该作者

有些信号包含丰富的高频分量

使用特权

评论回复
32
Uriah| | 2024-11-8 12:15 | 只看该作者

其他的信号和地要与这些高压引线和它的散热部分隔开

使用特权

评论回复
33
帛灿灿| | 2024-11-8 14:11 | 只看该作者

功率开关或整流环的连接没有直接接到电容的两端

使用特权

评论回复
34
Bblythe| | 2024-11-8 15:14 | 只看该作者

变压器隔离拓扑中,变压器有多少个绕组

使用特权

评论回复
35
周半梅| | 2024-11-8 17:10 | 只看该作者

在直流电流上叠加了一些小的交流电流分量

使用特权

评论回复
36
Pulitzer| | 2024-11-8 18:13 | 只看该作者

连接点是产生控制IC所要检测的小电压的所有器件的公共连接点

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则