for (i = 0; i < size; i += 4, buf+=4, addr += 4) { memcpy(&write_data, buf, 4); //用以保证HAL_FLASH_Program的第三个参数是内存首地址对齐 HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, addr, write_data); read_data = *(uint32_t *)addr; /* You can add your code under her...
FLASH_TYPEPROGRAM_FLASHWORD,用于芯片内部Flash编程。 FLASH_TYPEPROGRAM_OTPWORD,用于芯片内部OTP存储区编程,当前的H743并没有这个区域,所以可以忽略。 第2个参数是要编程的Flash地址。 第3个参数是要编程到Flash的数据地址。 返回值,返回HAL_TIMEOUT表示超时,HAL_ERROR表示参数错误,HAL_OK表示发送成功,HAL_BUSY表...
45. memcpy((char *)FlashWord, _ucpSrc, 32); 46. _ucpSrc += 32; 47. 48. if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_FLASHWORD, _ulFlashAddr, 49. (uint64_t)((uint32_t)FlashWord)) == HAL_OK) 50. { 51. _ulFlashAddr = _ulFlashAddr + 32; /* 递增,操作下一个256bit */ 52...
| FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);FLASH_ProgramWord(addr, data);FLASH_LockBank1();
(FLASH_TYPEPROGRAM_WORD, add, set_param.open_high_enable);25if(set_param.open_high_enable!= (*((uint32_t*)add))) { HAL_FLASH_Lock(); __set_PRIMASK(0);return0; }2627add +=4;28HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, add, set_param.open_led_blink_time);29if(set_param.open...
[0];buf.buff[2]=writer.data[1];buf.buff[3]=0xA5;find_new_entry();HAL_FLASH_Unlock();if(flasher.new_addr-4>=flasher.flash_start_address){HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD,flasher.new_addr-4,0x00);}HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD,flasher.new_addr,buf.data);HAL_...
;69.if(HAL_FLASH_Program(FLASH_TYPEPROGRAM_FLASHWORD,_ulFlashAddr,70.(uint64_t)((uint32_t)FlashWord))==HAL_OK)71.{72.;// _ulFlashAddr = _ulFlashAddr + 32;73.74.}75.else76.{77.goto err;78.
总之我目前就是按Page或Sector擦除,然后用第一种模式写8字节到指定地址就行了。其他的模式我也没继续研究下去。对于STM32L475来说,这里只有使用FLASH_TYPEPROGRAM_DOUBLEWORDf。而且要注意传入的地址只能8字节对齐,因为这里只能一次性写入8字节,没有别的模式可选。
HAL_FLASH_Program(FLASH_TYPEPROGRAM_BYTE, 0x08008000, 0xAA); ``` 2.写入半字(16位):使用HAL_FLASH_Program()函数可以将半字(16位)数据写入Flash存储器中。例如,要将值0x55AA写入地址0x08008000的Flash存储器中,可以使用以下代码: ```c HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, 0x08008000, 0x...
ProgramWord函数),要写入的数据应为32位的无符号整数。对于双字大小的写入(FLASH_ProgramDoubleWord函数...