wlx18682353162 发表于 2021-4-21 18:55:44

MDK5针对CMSIS Driver

MDK5针对CMSIS Driver这份应用实例 好像是空白的没有应用的例子,也没有help   硬汉

eric2013 发表于 2021-4-22 09:00:54

有的,很多例子的。

wlx18682353162 发表于 2021-4-22 09:09:25

有链接吗?硬汉 哪里可以找到

wlx18682353162 发表于 2021-4-22 09:14:25

CMSIS驱动程序参考吧

caicaptain2 发表于 2021-4-22 10:24:20

有帮组文档的。目录里面找找。 而且,c文件本身的函数注释,也有很多说明。功能参考
[*]内核信息与控制

[*]osKernelGetInfo:获取RTOS内核信息。
[*]osKernelGetState:获取当前的RTOS内核状态。
[*]osKernelGetSysTimerCount:获取RTOS内核系统计时器计数。
[*]osKernelGetSysTimerFreq:获取RTOS内核系统计时器频率。
[*]osKernelInitialize:初始化RTOS内核。
[*]osKernelLock:锁定RTOS内核调度程序。
[*]osKernelUnlock:解锁RTOS内核调度程序。
[*]osKernelRestoreLock:恢复RTOS内核调度程序锁定状态。
[*]osKernelResume:恢复RTOS内核调度程序。
[*]osKernelStart:启动RTOS内核调度程序。
[*]osKernelSuspend:挂起RTOS内核调度程序。
[*]osKernelGetTickCount:获取RTOS内核滴答计数。
[*]osKernelGetTickFreq:获取RTOS内核滴答频率。
[*]线程管理

[*]osThreadDetach:分离线程(线程终止时可以回收线程存储)。
[*]osThreadEnumerate:枚举活动线程。
[*]osThreadExit:终止当前正在运行的线程的执行。
[*]osThreadGetCount:获取活动线程的数量。
[*]osThreadGetId:返回当前正在运行的线程的线程ID。
[*]osThreadGetName:获取线程的名称。
[*]osThreadGetPriority:获取线程的当前优先级。
[*]osThreadGetStackSize:获取线程的堆栈大小。
[*]osThreadGetStackSpace:根据执行期间的堆栈水印记录获取线程的可用堆栈空间。
[*]osThreadGetState:获取线程的当前线程状态。
[*]osThreadJoin:等待指定线程终止。
[*]osThreadNew:创建一个线程并将其添加到活动线程中。
[*]osThreadResume:恢复线程的执行。
[*]osThreadSetPriority:更改线程的优先级。
[*]osThreadSuspend:暂停执行线程。
[*]osThreadTerminate:终止线程的执行。
[*]osThreadYield:将控制权传递给处于就绪状态的下一个线程。
[*]线程标志

[*]osThreadFlagsSet:设置线程的指定线程标志。
[*]osThreadFlagsClear:清除当前正在运行的线程的指定线程标志。
[*]osThreadFlagsGet:获取当前运行线程的当前线程标志。
[*]osThreadFlagsWait:等待当前正在运行的线程的一个或多个线程标志发出信号。
[*]事件标志

[*]osEventFlagsGetName:获取事件标志对象的名称。
[*]osEventFlagsNew:创建并初始化事件标志对象。
[*]osEventFlagsDelete:删除事件标志对象。
[*]osEventFlagsSet:设置指定的事件标志。
[*]osEventFlagsClear:清除指定的事件标志。
[*]osEventFlagsGet:获取当前事件标志。
[*]osEventFlagsWait:等待一个或多个事件标志被发出信号。
[*]通用等待函数

[*]osDelay:等待超时(时间延迟)。
[*]osDelayUntil:等到指定时间。
[*]计时器管理

[*]osTimerDelete:删除计时器。
[*]osTimerGetName:获取计时器的名称。
[*]osTimerIsRunning:检查计时器是否正在运行。
[*]osTimerNew:创建和初始化计时器。
[*]osTimerStart:启动或重新启动计时器。
[*]osTimerStop:停止计时器。
[*]互斥管理

[*]osMutexAcquire:获取互斥锁或超时(如果已锁定)。
[*]osMutexDelete:删除互斥对象。
[*]osMutexGetName:获取互斥对象的名称。
[*]osMutexGetOwner:获取拥有互斥对象的线程。
[*]osMutexNew:创建和初始化Mutex对象。
[*]osMutexRelease:释放由osMutexAcquire获取的Mutex。
[*]信号量

[*]osSemaphoreAcquire:获取信号量令牌或超时(如果没有可用的令牌)。
[*]osSemaphoreDelete:删除一个信号量对象。
[*]osSemaphoreGetCount:获取当前信号量令牌计数。
[*]osSemaphoreGetName:获取信号量对象的名称。
[*]osSemaphoreNew:创建并初始化信号量对象。
[*]osSemaphoreRelease:释放信号量令牌,直到初始最大计数。
[*]内存池

[*]osMemoryPoolAlloc:从内存池分配一个内存块。
[*]osMemoryPoolDelete:删除内存池对象。
[*]osMemoryPoolFree:将分配的内存块返回到内存池。
[*]osMemoryPoolGetBlockSize:获取内存池中的内存块大小。
[*]osMemoryPoolGetCapacity:获取内存池中最大的内存块数。
[*]osMemoryPoolGetCount:获取内存池中使用的内存块数。
[*]osMemoryPoolGetName:获取内存池对象的名称。
[*]osMemoryPoolGetSpace:获取内存池中可用的内存块数。
[*]osMemoryPoolNew:创建并初始化内存池对象。
[*]消息队列

[*]osMessageQueueDelete:删除消息队列对象。
[*]osMessageQueueGet:从队列获取消息,如果队列为空,则超时。
[*]osMessageQueueGetCapacity:获取消息队列中的最大消息数。
[*]osMessageQueueGetCount:获取消息队列中排队的消息数。
[*]osMessageQueueGetMsgSize:获取内存池中的最大消息大小。
[*]osMessageQueueGetName:获取消息队列对象的名称。
[*]osMessageQueueGetSpace:获取消息队列中消息的可用插槽数。
[*]osMessageQueueNew:创建和初始化消息队列对象。
[*]osMessageQueuePut:如果队列已满,则将消息放入队列或超时。
[*]osMessageQueueReset:将消息队列重置为初始空状态。
可以从线程和中断服务例程(ISR)调用以下CMSIS-RTOS C API v2函数:
[*]osKernelGetInfo,osKernelGetState,osKernelGetTickCount,osKernelGetTickFreq,osKernelGetSysTimerCount,osKernelGetSysTimerFreq
[*]osThreadGetId,osThreadFlagsSet
[*]osEventFlagsSet,osEventFlagsClear,osEventFlagsGet,osEventFlagsWait
[*]osSemaphoreAcquire,osSemaphoreRelease,osSemaphoreGetCount
[*]osMemoryPoolAlloc,osMemoryPoolFree,osMemoryPoolGetCapacity,osMemoryPoolGetBlockSize,osMemoryPoolGetCount,osMemoryPoolGetSpace
[*]osMessageQueuePut,osMessageQueueGet,osMessageQueueGetCapacity,osMessageQueueGetMsgSize,osMessageQueueGetCount,osMessageQueueGetSpace


Zhangjc5101 发表于 2021-4-22 13:57:27

关于CMSIS Driver这块,原本是想简化驱动程序开发,尤其是I2C、SPI和USART方面。这几天给LPC54114主控芯片开发程序,采用CMSIS-OS2和CMSIS DRIVER来进行,OS2部份被多任务堆栈分配折腾一通,然后在I2C驱动24C04过程中采用了CMSIS DRIVER接口,受尽折磨,最后发现是CMSIS DRIVER无法设置I2C器件的子地址,只好用FSL_i2c_dma.C提供的驱动接口重构,方能够实现DMA方式对24C04的读写工作。加之串口还有问题,好像芯片的驱动没有办法实现串口的不定长接收,timeout不支持。还在想办法处理中。。。。

wlx18682353162 发表于 2021-4-22 15:19:50

Zhangjc5101 发表于 2021-4-22 13:57
关于CMSIS Driver这块,原本是想简化驱动程序开发,尤其是I2C、SPI和USART方面。这几天给LPC54114主控芯片 ...

以太网中间件应用没有?

wlx18682353162 发表于 2021-4-22 15:21:18

Zhangjc5101 发表于 2021-4-22 13:57
关于CMSIS Driver这块,原本是想简化驱动程序开发,尤其是I2C、SPI和USART方面。这几天给LPC54114主控芯片 ...

我现在还有一个问题就是 CMSIS Driver 之以太网 一初始化   w25q32读写就不正常了硬件SPI和模拟SPI 在执行了以太网初始化函数后再重新初始化spi接口,操作存储器还是不正常,也读不到存储器ID了,但是以太网初始化后以太网功能倒是正常的 可以正常Ping

wlx18682353162 发表于 2021-5-6 11:50:31

感谢硬汉耐心指导,基于F1的RTX5 CMSIS DRIVER问题全部解决了,非常感谢

wlx18682353162 发表于 2021-5-7 17:56:48

发现CMSIS Driver的USART接口,在中断中调用都出现问题,
比如        Driver_USART2.Send(Dat, Len);
        while (Driver_USART2.GetStatus().tx_busy);
郁闷了,请教一下硬汉哥

wlx18682353162 发表于 2021-5-7 18:06:18

还有一个问题就是CMSIS Driver里面 似乎没有谈到NVIC中断优先级的设置高低

eric2013 发表于 2021-5-8 07:43:04

wlx18682353162 发表于 2021-5-7 18:06
还有一个问题就是CMSIS Driver里面 似乎没有谈到NVIC中断优先级的设置高低

CMSIS-Driver只管使能和禁止。

具体优先级大小和优先级分组是需要用户设置的。

wlx18682353162 发表于 2021-5-8 09:18:25

eric2013 发表于 2021-5-8 07:43
CMSIS-Driver只管使能和禁止。

具体优先级大小和优先级分组是需要用户设置的。

串口1事件收到数据后直接在回调函数里调用串口2发送 ,发现串口2一直忙状态,实际就一直卡在while (Driver_USART2.GetStatus().tx_busy);
串口2发送函数是:
      Driver_USART2.Send(Dat, Len);
      while (Driver_USART2.GetStatus().tx_busy);

这个问题还是想和硬汉交流一下

snakeemail 发表于 2021-5-8 10:26:49

这块真是脑袋疼,寄存器,HAL,CMSIS 一共有3类,结果干一样的事情。

wlx18682353162 发表于 2021-5-8 14:07:57

while (Driver_USART2.GetStatus().tx_busy)
就拿这句话实际也没有操作寄存器,我看的也是相当查询的意思,具体在串口中断中进行的,所以串口1的回调事件函数里面操作其它串口失败,是不是就是这个原因呢,希望请教硬汉哥

wlx18682353162 发表于 2021-5-11 15:05:38

:victory::victory::victory:

wlx18682353162 发表于 2021-5-24 13:57:16

本篇提到的问题现象,如有了解的大佬,请停下你的脚步给交流一下{:15:}
页: [1]
查看完整版本: MDK5针对CMSIS Driver