[其他ST产品] STM32F401CCU6移植华为LiteOS

[复制链接]
5789|36
 楼主| 自动化陈稳 发表于 2022-11-28 23:56 | 显示全部楼层
在STM32F401_CCU6/Src/tim.c中,添加以下代码
  1. #include "sys_init.h"
  2. #include "los_hwi.h"
  3. VOID TimInit(VOID)
  4. {
  5.     MX_TIM3_Init();
  6. }
  7. VOID TimerHwiCreate(VOID)
  8. {
  9.     UINT32 ret;

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

  23.     if (swCycles < bacCycle) {
  24.         cycleTimes++;
  25.     }

  26.     bacCycle = swCycles;
  27.     cycles = swCycles + cycleTimes * TIMER3_RELOAD;

  28.     return cycles;
  29. }
  30. TimControllerOps g_cpupTimerOps = {
  31.     .timInit = TimInit,
  32.     .timHwiCreate = TimerHwiCreate,
  33.     .timGetTimerCycles = GetTimerCycles
  34. };
  35. :
 楼主| 自动化陈稳 发表于 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;
 楼主| 自动化陈稳 发表于 2022-11-28 23:57 | 显示全部楼层
在STM32F401_CCU6/Src/usart.c中,添加以下代码
  1. VOID UsartInit(VOID)
  2. {
  3.     MX_USART1_UART_Init();
  4. }
  5. VOID UsartWrite(const CHAR c)
  6. {
  7.     (VOID)HAL_UART_Transmit(&huart1, (UINT8 *)&c, 1, DEFAULT_TIMEOUT);
  8. }
  9. UINT8 UsartRead(VOID)
  10. {
  11.     UINT8 ch;
  12.     (VOID)HAL_UART_Receive(&huart1, &ch, sizeof(UINT8), 0);
  13.     return ch;
  14. }
  15. STATIC VOID UartHandler(VOID)
  16. {
  17.     (VOID)uart_getc();
  18. }
  19. INT32 UsartHwi(VOID)
  20. {
  21.     if (huart1.Instance == NULL) {
  22.         return LOS_NOK;
  23.     }
  24.     HAL_NVIC_EnableIRQ(USART1_IRQn);
  25.     __HAL_UART_CLEAR_FLAG(&huart1, UART_FLAG_TC);
  26.     (VOID)LOS_HwiCreate(NUM_HAL_INTERRUPT_UART, 0, 0, UartHandler, NULL);
  27.     __HAL_UART_ENABLE_IT(&huart1, UART_IT_RXNE);
  28.     return LOS_OK;
  29. }
  30. UartControllerOps g_genericUart = {
  31.     .uartInit = UsartInit,
  32.     .uartWriteChar = UsartWrite,
  33.     .uartReadChar = UsartRead,
  34.     .uartHwiCreate = UsartHwi
  35. };
 楼主| 自动化陈稳 发表于 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文件将字段放在合适的位置。
 楼主| 自动化陈稳 发表于 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改成
 楼主| 自动化陈稳 发表于 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
 楼主| 自动化陈稳 发表于 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名字。
童雨竹 发表于 2024-11-8 07:10 | 显示全部楼层

宽度则与电感量和电阻量成反比
Wordsworth 发表于 2024-11-8 08:13 | 显示全部楼层

电流要增大
Clyde011 发表于 2024-11-8 09:16 | 显示全部楼层

整流器或功率开关管与每个电容端的连线长度和宽度都要一样
公羊子丹 发表于 2024-11-8 10:09 | 显示全部楼层

有些信号包含丰富的高频分量
Uriah 发表于 2024-11-8 12:15 | 显示全部楼层

其他的信号和地要与这些高压引线和它的散热部分隔开
帛灿灿 发表于 2024-11-8 14:11 | 显示全部楼层

功率开关或整流环的连接没有直接接到电容的两端
Bblythe 发表于 2024-11-8 15:14 | 显示全部楼层

变压器隔离拓扑中,变压器有多少个绕组
周半梅 发表于 2024-11-8 17:10 | 显示全部楼层

在直流电流上叠加了一些小的交流电流分量
Pulitzer 发表于 2024-11-8 18:13 | 显示全部楼层

连接点是产生控制IC所要检测的小电压的所有器件的公共连接点
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部