华大L17x模拟ST的LL库编写的驱动库
本帖最后由 yizushijie 于 2022-5-27 08:40 编辑#申请原创# 1. 本库是模拟ST的LL库编写的驱动库,目前在完善中。已经实现RTC,LPUART,UART,RCC,GPIO,LPTIME以及CLKTRIM等功能。交流群:651714229----
2. 20210908调试优化通用定时器的输入捕捉功能;目前验证通过。
3. 20210912增加端口的中断模式配置,功能配置,暂时没有验证。
4. 20210923更新验证端口的中断模式配置功能;增加ADC的功能,暂时没有验证
5. 20210924修正ADC寄存器的配置问题;验证通过ADC的顺序扫描序列功能6. 20211007完善ADC的顺序扫描序列和插队扫描序列;验证完成操作内部Flash的操作
7. 20211008修改将GPIO设置为开漏输出模式,配置错误的问题。验证通过i2c时序,注意HC32的i2c操作,需要和数据手册中时序严格对应,否则容易出错。只验证了主机模式。
8. 20211025优化定时器的操作,将通用定时器配置修改位TIM_M0,TIM_M1,TIM_M2,TIM_M3;将之前的TIM_M23模式拆分。
9. 20211028更新部分SPI操作,细节部分的优化。
10. 20211108细节部分优化11. 20220219增加适配HC32L136芯片,本驱动库中的AES功能验证通过,对应AES的ECB加密方式。11. 20220329,更新SPI驱动部分。初步实现L176和L136的大部分功能能够通用使用
12. 20220527,更新验证SPI驱动部分。其他细节的优化;增加断码驱动屏幕的驱动部分
注意:
1. 使用CLKTRIM进行时钟校准或者计算的时候去,进入中断之后,首先获取校准和参考寄存器的值。CLKTRIM中断,读取校准和参考寄存器的值之后;中断标志位会自动的清除,并且,清除中断标志位;校准和参考寄存器中的值也会立即清零。
没有工程呀 martinhu 发表于 2021-8-31 13:21
没有工程呀
这是个驱动库,不是个demo 支持 更新通用定时器的模式0的配置。 本帖最后由 yizushijie 于 2021-9-4 09:54 编辑
1. 更新GPIO的置位和清零操作以及取反操作,之前会存在部分状态下,操作冲突问题
2. MDK中参考宏定义
c/c++
<Define>USE_MCU_HC32L1,USE_GPIO_FULL,USE_FULL_LL_DRIVER,HSE_VALUE=8000000,HSE_STARTUP_TIMEOUT=100,LSE_STARTUP_TIMEOUT=5000,LSE_VALUE=32768,HSI_VALUE=8000000,LSI_VALUE=40000,PREFETCH_ENABLE=1,HC32L17xK</Define>
asm
<Define>VECT_TABLE=0</Define>
3. IAR中参考宏定义
<state>USE_MCU_HC32L1</state>
<state>USE_GPIO_FULL</state>
<state>USE_FULL_LL_DRIVER</state>
<state>HSE_VALUE=8000000</state>
<state>LSE_VALUE=32768</state>
<state>HSI_VALUE=24000000</state>
<state>LSI_VALUE=38400</state>
<state>PREFETCH_ENABLE=1</state>
<state>HC32L17xK</state>
<state>VECT_TABLE=0</state>
<state>__DEBUG</state>
更新通用定时器的输入捕捉功能。目前实现通用定时器的模式0和模式23的输入捕捉功能 增加了Demo基础工程; 差距越来越小了.
不错,不错,真心不错!
逆水行舟,不进则退,原厂的兄弟们要加油了! 不好意思,老铁们,最近没有更新,最近在进行项目的完善以及梳理flash操作。 增加对内部Flash操作的操作函数;包含读写;写操作之前,必须执行擦除
///////////////////////////////////////////////////////////////////////////////
//////函 数:
//////功 能: 无校验模式写入数据
//////输入参 数:
//////输出参 数:
//////说 明:
//////////////////////////////////////////////////////////////////////////////
uint8_t ex_rom_send_no_check(uint32_t addr, uint8_t *pbuffer, uint16_t length)
{
uint8_t _return = 0;
//---当前扇区的结束位置
uint32_t sector_addr_end = ((addr & EX_ROM_SECTOR_MASK) + EX_ROM_SECTOR_SIZE-1);
uint16_t source_index = 0;
//---使能Flash写操作
LL_FLASH_Enable_Program();
//---解锁当前扇区
LL_FLASH_UnLock(addr);
//---清除标志位
LL_FLASH_ClearFlag();
//---依次写入数据
for (source_index=0;source_index<length;source_index++)
{
//---写入数据
_return=LL_FLASH_ProgramByte(addr, pbuffer);
//---下一个写入的地址数据
addr++;
//---判断是否发生了跨扇区操作
if ((addr> sector_addr_end)&&(source_index!=(length-1)))
{
//---锁定上一个扇区
LL_FLASH_LockAddr(addr - EX_ROM_SECTOR_SIZE);
//---解锁当前扇区
LL_FLASH_UnLock(addr);
//---当期扇区结束地址
sector_addr_end += EX_ROM_SECTOR_SIZE;
}
//---校验数据的写入
if (_return!=0)
{
//---数据写入异常,退出
break;
}
}
//---锁定Flash
LL_FLASH_Lock();
//---使能Flash的读取操作,避免其他的误操作,导致Flash异常或者硬件错误
LL_FLASH_Enable_Read();
//---返回操作结果
return _return;
}
///////////////////////////////////////////////////////////////////////////////
//////函 数:
//////功 能:
//////输入参 数:
//////输出参 数:
//////说 明:
//////////////////////////////////////////////////////////////////////////////
uint8_t rom_read_byte(uint32_t addr)
{
//---读取数据
return *(volatile uint8_t*)addr;
}
///////////////////////////////////////////////////////////////////////////////
//////函 数:
//////功 能:
//////输入参 数:
//////输出参 数:
//////说 明:
//////////////////////////////////////////////////////////////////////////////
uint16_t rom_read_halfword(uint32_t addr)
{
//---读取数据
return *(volatile uint16_t*)(addr & 0xFFFFFFFE);
}
///////////////////////////////////////////////////////////////////////////////
//////函 数:
//////功 能:
//////输入参 数:
//////输出参 数:
//////说 明:
//////////////////////////////////////////////////////////////////////////////
uint32_t rom_read_word(uint32_t addr)
{
//---读取数据
return *(volatile uint32_t*)(addr & 0xFFFFFFFC);
}
///////////////////////////////////////////////////////////////////////////////
//////函 数:
//////功 能:
//////输入参 数:
//////输出参 数:
//////说 明:
//////////////////////////////////////////////////////////////////////////////
uint64_t rom_read_doubleword(uint32_t addr)
{
uint64_t _return = rom_read_word(addr);
addr += 4;
_return = (_return << 32) + rom_read_word(addr);
return _return;
} 能收藏就好了,mark 这芯片不错。 1. 增加DMA驱动功能,
2. 对于一些功能函数的命名方式,进行修改;规范化
页:
[1]