打印
[技术问答]

华大L17x模拟ST的LL库编写的驱动库

[复制链接]
11763|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yizushijie|  楼主 | 2021-8-31 13:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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中断,读取校准和参考寄存器的值之后;中断标志位会自动的清除,并且,清除中断标志位;校准和参考寄存器中的值也会立即清零。













hc32l1xx_ll_drivers_20220527.rar

201.09 KB

驱动库

hc32l176xxproject_demo.rar

2.81 MB

demo工程

使用特权

评论回复
沙发
martinhu| | 2021-8-31 13:21 | 只看该作者
没有工程呀

使用特权

评论回复
板凳
yizushijie|  楼主 | 2021-8-31 13:22 | 只看该作者

这是个驱动库,不是个demo

使用特权

评论回复
地板
gyh974| | 2021-8-31 13:46 | 只看该作者
支持

使用特权

评论回复
5
yizushijie|  楼主 | 2021-9-1 16:12 | 只看该作者
更新通用定时器的模式0的配置。

hc32l1xx_ll_drivers_202100901.rar

102.08 KB

使用特权

评论回复
6
yizushijie|  楼主 | 2021-9-4 09:15 | 只看该作者
本帖最后由 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>

hc32l1xx_ll_drivers_202100903.rar

102.02 KB

使用特权

评论回复
7
yizushijie|  楼主 | 2021-9-7 12:07 | 只看该作者
更新通用定时器的输入捕捉功能。目前实现通用定时器的模式0和模式23的输入捕捉功能

hc32l1xx_ll_drivers_202100907.rar

105.49 KB

使用特权

评论回复
评论
心灵的天空 2021-9-17 13:54 回复TA
厉害厉害 
8
yizushijie|  楼主 | 2021-9-13 13:16 | 只看该作者
增加了Demo基础工程;

使用特权

评论回复
9
cos12a| | 2021-9-18 12:47 | 只看该作者
差距越来越小了.

使用特权

评论回复
10
liaotian001| | 2021-9-18 18:54 | 只看该作者
不错,不错,真心不错!
逆水行舟,不进则退,原厂的兄弟们要加油了!

使用特权

评论回复
11
yizushijie|  楼主 | 2021-9-30 12:27 | 只看该作者
不好意思,老铁们,最近没有更新,最近在进行项目的完善以及梳理flash操作。

使用特权

评论回复
12
yizushijie|  楼主 | 2021-10-7 13:10 | 只看该作者
增加对内部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[source_index]);
                //---下一个写入的地址数据
                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;
}

使用特权

评论回复
13
match007| | 2022-4-13 14:24 | 只看该作者
能收藏就好了,mark

使用特权

评论回复
14
fanghuage| | 2022-5-27 09:01 | 只看该作者
这芯片不错。

使用特权

评论回复
15
yizushijie|  楼主 | 2022-11-21 09:58 | 只看该作者
1. 增加DMA驱动功能,
2. 对于一些功能函数的命名方式,进行修改;规范化

hc32l1xx_ll_drivers_20221121.rar

219.49 KB

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

80

帖子

4

粉丝