您的位置:

基于STM32的ISP编程工具 stm32isp

一、简介

stm32isp是一款基于STM32芯片的ISP编程工具,支持通过串口或CAN总线进行STM32固件的下载和更新。它是基于一些开源的ISP程序源代码进行修改和开发的,可以广泛地应用于各种STM32芯片的编程工作。

二、主要功能

stm32isp的主要功能集中在支持各种STM32芯片的下载和更新。它可以通过以下方式进行配置和使用:

1、配置串口或CAN总线接口参数。

 /**
  * @brief 串口或CAN总线接口初始化函数
  * @param baudrate  波特率
  * @return None
  * @note   使用USART1或CAN1进行串口或CAN总线通信
  */
void USART_Configuration(uint32_t baudrate)
{
    USART_InitTypeDef USART_InitStructure;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);

    USART_InitStructure.USART_BaudRate = baudrate;
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;
    USART_InitStructure.USART_StopBits = USART_StopBits_1;
    USART_InitStructure.USART_Parity = USART_Parity_No;
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;

    USART_Init(USART1, &USART_InitStructure);
    USART_Cmd(USART1, ENABLE);
}

2、下载或更新STM32固件。

/**
  * @brief 从串口或CAN总线下载或更新STM32固件
  * @param None
  * @return None
  * @note   设置下载模式后,发送“0x7F”代表进入BootLoader,
  *         然后等待STM32 BootLoader回复“ACK”合法后发送下载数据包
  *         和相应的校验码,并且检查bootloader返回值
  */
void Download_Program(void)
{
    uint32_t addr = ApplicationAddress;
    uint16_t len = 0;
    uint8_t x, data;
    uint16_t temp;

    if (Update_Mode == UART_MODE) {
        if (USART_ByteRead(&data) == 0) {
            if (data == ADDR_MODE_1) {                    
                USART_ByteWrite(0x00);
                USART_ByteWrite(0xFF);
                USART_ByteWrite(0x00);
                USART_ByteWrite(0xFF);                        
            } else if (data == Data_MODE_2) {                 
                temp = STM32_GetFirmwareInfo(addr, &len);
                if (temp == SR_SUCCESS) {                   
                    STM32_SendACK();
                    x = temp >> 8;
                    x += 0x30;
                    USART_ByteWrite(x);
                    USART_ByteWrite(((uint8_t)temp & 0xff) + 0x30);
                    Checksum_Write((uint8_t)x + ((uint8_t)temp & 0xff));
                    for (int i = 0; i < len;) {
                        STM32_YmodemReceive(&yx_buffer[i], &block_number, &char_counter);
                        i += char_counter;
                    }
                    RefreshStatus(uint8_t Downloadsucess);
                }
            }else if (data == End_MODE_3) {
                JumpAddress = STM32_ReadJumpAddress();
                Jump_To_Application();   
            }
        }
    }else if (Update_Mode == CAN_MODE){
        //...
    }
}

3、检测STM32是否处于BootLoader模式。

/**
  * @brief  检测STM32是否进入BootLoader模式
  * @param None
  * @retval 1:处于bootloader模式;0:未进入
  */
uint8_t CheckForEnterBootloader(void)
{
    static uint8_t TryEnterBootLoader = 3;

    if (!TryEnterBootLoader)
        return 0;

    if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == 0) {
        --TryEnterBootLoader;
        DelayXms(20);
        if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == 0) {
            return 1;
        }
    }
    return 0;
}

三、优势

通过stm32isp工具,我们可以避免使用JTAG调试和ACU算法的复杂性和高成本,同时缩短了开发周期。目前STM32芯片应用广泛,而stm32isp已经广泛应用于各种工业自动化控制、电力电子控制以及通信设备中,提高了产品的可靠性和生产效率。

四、缺点

stm32isp工具需要在线下载和更新STM32固件,一旦出现意外中断,就会导致芯片烧录失败,同时对于某些低端STM32芯片,由于内部Flash的容量限制,stm32isp很可能会导致烧录失败。

五、应用场景

stm32isp工具广泛应用于以下几个方面:

1、工业自动化控制和电力电子产品的生产和烧录;

2、国防军工和医疗设备的开发和调试;

3、通信设备和家庭电器中的固件下载和更新。

六、总结

stm32isp作为一款基于STM32芯片的ISP编程工具,具有快速、高效、低成本等特点,成为许多工业制品自动化生产过程中的重要利器,同时,也在国防军工和医疗设备开发中扮演着重要角色。