一、简介
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编程工具,具有快速、高效、低成本等特点,成为许多工业制品自动化生产过程中的重要利器,同时,也在国防军工和医疗设备开发中扮演着重要角色。