|
现在在做一个下载器,就是用STM32F405芯片模拟SWD协议给STM32F103RET6芯片下载程序,通过规格书发现F103系列芯片的闪存编程使能是半字的形式,但是SWD协议是4字节的,通过什么方式能给flash按照半字的形式下载程序。有谁研究过这个的,能不能给个DEMO程序看看。 这是我的一部分程序: uint8_t swd_write_block(uint32_t address, uint8_t *data, uint32_t size) { uint8_t tmp_in[4], req; uint32_t size_in_words,size_send; uint32_t i, ack,tmp; if (size==0) return 0; size_in_words = size/4; if (!swd_write_ap(AP_CSW, CSW_VALUE | CSW_SIZE16)) { return 0; } // TAR write req = SWD_REG_AP | SWD_REG_W | (1 << 2); int2array(tmp_in, address, 4); if (swd_transfer_retry(req, (uint32_t *)tmp_in) != 0x01) { return 0; } // DRW write req = SWD_REG_AP | SWD_REG_W | (3 << 2); for (i = 0; i < size_in_words; i++) { if (swd_transfer_retry(req, (uint32_t *)data) != 0x01) { return 0; } data+=4; } // dummy read req = SWD_REG_DP | SWD_REG_R | SWD_REG_ADR(DP_RDBUFF); ack = swd_transfer_retry(req, NULL); return (ack == 0x01); } |
在擦除flash时 同时挂起中断 是否会造成卡死以及相关的卡死机制
FLASH擦除轮询等待时CPU真的会轮询吗
HAL_I2C_Mem_Read 一直返回 BUSY
STM32F103C8T6 上电后无法通过串口发出数据的问题?
KEILMDK每次都要手动选Reset and Run吗 不然下载到板子上得重启电源才行 求解答
STM32F103的USB的虚拟串口,串口助手打开的时候会收到两条数据,第一条数据是前5秒串口助手未打开时发送的,这怎么解决?
询问电源纹波对芯片的影响
VL53L5CX无法使用
stm32f107裸机+HR911105A+lwIP 1.31 SYN发送失败的问题
MCU的ADC进行电压采集时,外部输入阻抗最大能到多少?
微信公众号
手机版
uint8_t swd_write_block(uint32_t address, uint8_t *data, uint32_t size)
{
uint8_t tmp_in[4], req;
uint32_t size_in_words,size_send;
uint32_t i, ack,tmp;
if (size==0)
return 0;
size_in_words = size/2;//计算半字数 //size_in_words = size/4; //计算字数
if (!swd_write_ap(AP_CSW, CSW_VALUE | CSW_SIZE16))//??
{
return 0;
}
// TAR write
req = SWD_REG_AP | SWD_REG_W | (1 << 2);
int2array(tmp_in, address, 2); //int2array(tmp_in, address, 4);
if (swd_transfer_retry(req, (uint32_t *)tmp_in) != 0x01)
{
return 0;
}
// DRW write
req = SWD_REG_AP | SWD_REG_W | (3 << 2);
for (i = 0; i < size_in_words; i++)
{
if (swd_transfer_retry(req, (uint32_t *)data) != 0x01)
{
return 0;
}
data+=2;//data+=4;
}
// dummy read
req = SWD_REG_DP | SWD_REG_R | SWD_REG_ADR(DP_RDBUFF);
ack = swd_transfer_retry(req, NULL);
return (ack == 0x01);
}
评分
查看全部评分