华大HC32L136写FLASH 0xff问题

给HC32L136做在线升级ISP功能,发现对FLASH进行大数据写操作时,校验不通过,写进去函数返回成功,但实际上还是0xFF。

查阅相关资料后,是写FLASH时没有关闭其他中断,影响到FLASH操作导致,关闭中断后,问题解决。源码如下:

en_result_t FlashWrite(unsigned short u32Addr, unsigned char *DatInf, unsigned short DatLen)
{
    en_result_t       enResult = Error;
	int i;

    __disable_irq();  /* 禁止全局中断*/
    
    ///< FLASH目标扇区擦除
    while(Flash_SectorErase(u32Addr)!=0);
    
    for(i=0; i<DatLen; i++){
			enResult = Flash_WriteByte(u32Addr+i, DatInf[i]);
			if (Ok == enResult)
			{
					if(*((volatile uint8_t*)(u32Addr+i)) == DatInf[i])
					{
							enResult = Ok;
					}
					else
					{
						enResult = 128;
						break;
					}
			}
		}
		__enable_irq();    /*  使能全局中断 */
    return enResult;
}

MARK!20230420

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
以下是使用HC32L136的GPIO实现4x5矩阵键盘的代码示例: ```c #include "hc32l136.h" #define ROW_PORT GpioPortA #define ROW_PIN GpioPin8 | GpioPin9 | GpioPin10 | GpioPin11 #define COL_PORT GpioPortB #define COL_PIN GpioPin0 | GpioPin1 | GpioPin2 | GpioPin3 | GpioPin4 #define KEY_1 0x01 #define KEY_2 0x02 #define KEY_3 0x03 #define KEY_4 0x04 #define KEY_5 0x05 #define KEY_6 0x06 #define KEY_7 0x07 #define KEY_8 0x08 #define KEY_9 0x09 #define KEY_0 0x00 uint8_t scan_key(void) { uint8_t row, col, key = 0xFF; for (row = 0; row < 4; row++) { Gpio_WriteOutputIO(ROW_PORT, ROW_PIN, 0x0F ^ (1 << row)); for (col = 0; col < 5; col++) { if (!Gpio_GetInputIO(COL_PORT, COL_PIN >> col)) { key = row * 5 + col + 1; break; } } if (key != 0xFF) break; } if (key == 0xFF) return key; switch (key) { case 1: return KEY_1; case 2: return KEY_2; case 3: return KEY_3; case 4: return KEY_4; case 5: return KEY_5; case 6: return KEY_6; case 7: return KEY_7; case 8: return KEY_8; case 9: return KEY_9; case 10: return KEY_0; } } int main(void) { SystemInit(); Gpio_InitIO(ROW_PORT, ROW_PIN, GpioDirOut); Gpio_InitIO(COL_PORT, COL_PIN, GpioDirIn); while (1) { uint8_t key = scan_key(); if (key != 0xFF) { // 检测到按键被按下 // 在这里做相应的处理 } } } ``` 以上代码实现了矩阵键盘的扫描,并返回按下的键值。其中,ROW_PORT和COL_PORT分别对应矩阵键盘的行和列所连接的GPIO端口;ROW_PIN和COL_PIN则分别对应矩阵键盘的行和列所连接的GPIO引脚。此外,还需要定义每个键对应的键值,这里以0~9为例,分别对应0~9的数字键。在scan_key函数中,使用Gpio_WriteOutputIO函数控制行输出,使用Gpio_GetInputIO函数读取列输入,从而实现矩阵键盘的扫描。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄大刀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值