- 2025-01-21
-
回复了主题帖:
两种电流检测电路有什么区别
低端的容易实现,成本低,主端的特别是电压较高时,成本较高,另外低端没高端安全,因为有时候负载需要共地通信,会有问题。
- 2025-01-20
-
回复了主题帖:
全国的3C补贴来了,你准备换手机了吗?
wangerxian 发表于 2025-1-17 09:06
3年算短算长?
中等偏短吧
- 2025-01-16
-
回复了主题帖:
全国的3C补贴来了,你准备换手机了吗?
我的手机每次换都是因为大家说用的时间太长了,哪里都好好的,实在不想换,最近用的3个手机都是。
-
回复了主题帖:
E2PROM的数据怎么读取出来?
淘宝上有专门读EEPROM的工具,SOP8的夹子,有读FLASH的,也有读EEPROM的,
- 2024-12-25
-
回复了主题帖:
固态继电器关断不彻底的原因是什么?
你已经说了,交流固态继电器,只适合控制交流,直流当然不能用了,你了解一下可控硅的触发原理
- 2024-12-23
-
回复了主题帖:
请问CH340G串口友好名称能否修改成设备名称?
WCH官网有专用的可以改名称的,外置EEPROM的
- 2024-12-18
-
回复了主题帖:
vscode+keil5环境下,在vscode中打开keil5项目文件后找不到源码文件,请问如何处理
有很多文件是MDK的特有文件,将其从MDK软件目录复制出来,比如说像stdint.h stdio.h string.h等等,否则也会找不到的。
-
回复了主题帖:
高频率脉冲怎么转变为模拟量?
是有好多温度传感器是以脉冲输出的,其实很简单啊,用MCU的定时器,输入源设为外部时钟就可以了,
- 2024-12-12
-
发表了主题帖:
【MCXN947评测】-点灯
前言
本次测评是直接在NXP官网上申请的,不是参加的EEWORLD的活动,所以评测也没有了压力,自己有空了就玩玩。
我和有个坛友一样,首次接触ARM单片机就是LPC1114,当年是ZLG推广的,开发板当时也很“便宜”,50块钱逻板+下载器。从51单片机转过来,很快就入门了。玩过LPC1114的都知道,它是基于寄存器写代码的,对于了解单片机底层确实很深入。后来玩STM32直接用库就没怎么深入了。
再之后玩过LPC1225、LPC1770系列,之后就转STM32了。
N947资源还是比较不错的,我主要看中的是双核、AI、16位AD,3运放,XSPI、大内存、大FLASH这几款特性。因为我后边想在项目里用上它。特别是它的XSPI可以同时支持外部FLASH和外部串行RAM,扩个32M大内存也没问题。
安装环境
官方主推的是【MCUXpresso IDE】,我花了一点时间安装了环境,想说的是爱你真不容易,需要勇气。
MCUXpresso IDE安装后,光是导入SDK我就花了好久,在网上找的教程图片,安装软件后,仍是没找到安装SDK的界面在哪,见下图,这个界面试了好久才找出来的,得先点左上角红点处,点了之后界面还特别小,拖到最大才显示出安装SDK的位置,并且所有菜单中都找不到这一项,只能用这种方法调出来。
导入SDK下一步时,它竟然还要联网,我不是把SDK下载好了么?我在公司电信网络一直过不去,回到家用移动网才行
后来我就放弃了,直接用它配置工具,将SDK导出到KEIL中用,还是熟悉的配方和味道。
引脚配置工具
NXP的引脚配置工具功能非常强大,和STM32 CUBE MX有一拼,不过功能多了显得有些乱,特别是在高分屏上显示的总觉得怪怪的。STM32CUBE MX它生成的代码有很多注释,用户程序只要放在规定的USER CODE注释中,再次生成也不会被删除,但NXP的好像不行,不过一般也不需要,因为它生成的文件逻辑层次很好,都是在独立文件中,也不需要和用户代码嵌在一起。
还有个特点是NXP的更新程序代码有代码比较工具,以及寄存器变更列表,很容易知道改了哪些。
点灯
查看开发板图纸,三色灯-红灯是安排在P0-10引脚上的,低电平点亮
用引脚配置工具配置引脚,配置别称,初始电平,方向等
引脚标签一定要起一个,后边写代码时好调用
然后再配置一下Systick,配置为1ms中断
然后就是代码了
搞个延时函数,以及systick irq中断函数,修改主逻辑,其它的代码不改
uint32_t tick_count=0;
void Delay(int ms){
tick_count=ms;
while(tick_count);
}
void SysTick_Handler(void){
if(tick_count)
tick_count--;
}
int main(void)
{
char ch;
/* Init board hardware. */
/* attach FRO 12M to FLEXCOMM4 (debug console) */
CLOCK_SetClkDiv(kCLOCK_DivFlexcom4Clk, 1u);
CLOCK_AttachClk(BOARD_DEBUG_UART_CLK_ATTACH);
/* attach TRACECLKDIV to TRACE */
CLOCK_SetClkDiv(kCLOCK_DivTraceClk, 2U);
CLOCK_AttachClk(kTRACE_DIV_to_TRACE);
BOARD_InitPins();
BOARD_InitBootClocks();
BOARD_InitDebugConsole();
PRINTF("hello world.\r\n");
BOARD_InitBootPeripherals(); //初始化外设-SYSTICK 1ms中断
while (1)
{
//ch = GETCHAR();
//PUTCHAR(ch);
Delay(500);
BOARD_INITPINS_LED_RED_GPIO->PDOR&=~BOARD_INITPINS_LED_RED_GPIO_PIN_MASK; //清0,点亮
Delay(500);
BOARD_INITPINS_LED_RED_GPIO->PDOR|=BOARD_INITPINS_LED_RED_GPIO_PIN_MASK;
}
}
代码中,由于在引脚配置时,已配置了引脚标签,所以这里调用就比较方便了。
寄存器直接写代码,NXP的还是很方便的。
测试中发现一个问题,其它朋友好像也提到过的,下载程序没运行,调试或复位才会执行,后边再查查原因。
我比较喜欢自己搞代码,我看有很多评测把官方例子跑一次就好了,那是学不到东西的,得自己动手。
-
发表了日志:
【MCXN947评测】-点灯
- 2024-12-10
-
回复了主题帖:
NXP有活动,大家可以去试试!
bigbat 发表于 2024-12-9 16:54
我今天下午收到板子了,FRDM-MCXA156开发板,加紧时间适用不知道需要在哪里发帖子
我选的是N947板子
- 2024-12-07
-
回复了主题帖:
NXP有活动,大家可以去试试!
bigbat 发表于 2024-12-4 09:14
呵呵,我和你的待遇是一样地。也是没有任何的反馈。你给不给板子发个消息也行啊
最近:就在刚刚周六晚上,收到了板子,准备发个贴讲讲板子试用进度,一起互相学习。
- 2024-12-04
-
回复了主题帖:
NXP有活动,大家可以去试试!
我通过了,发了地址,但好像一周多过去了也没提示发货或收到收件信息。
- 2024-12-02
-
回复了主题帖:
FREERTOS串口输出出错
最大优先级是多少?你配置的线程优先级超过了最大值,好像默认值一般是8吧,
- 2024-11-21
-
回复了主题帖:
关于USB的TYPE -C接口
Dp1,Dn1 ,Dn2,Dp2不是两组,是1组,因为TYPE-C是支持正反插的,实际上只有2根1对差分。 A2\A3\A10\A11如果不用USB 3.0信号是可以用做其它目的的,但一般不这么玩,万一别人插上了USB 3。0设备,你的板子引脚不是烧了么?
-
回复了主题帖:
咨询步进电机驱动方案
你如果量大当然可以自己搞MCU驱动,否则没必要。
- 2024-11-20
-
回复了主题帖:
STM32L4系列的USB驱动
HID不就行了?
-
回复了主题帖:
STM32系列哪款芯片的功耗最低
当然最新的U系列了
- 2024-11-13
-
回复了主题帖:
如何使能二进制信号量
我只是大自然的搬运工
1. **二进制信号量简介**
- 在FreeRTOS中,二进制信号量是一种用于任务同步和互斥的机制。它只有两种状态:满(被获取)和空(可用)。二进制信号量可以用于保护共享资源,也可以用于任务之间的同步。
2. **使能二进制信号量的步骤**
- **创建二进制信号量**
- 使用`xSemaphoreCreateBinary()`函数来创建一个二进制信号量。这个函数返回一个`SemaphoreHandle_t`类型的句柄。例如:
```c
SemaphoreHandle_t binarySemaphore;
binarySemaphore = xSemaphoreCreateBinary();
if(binarySemaphore == NULL)
{
// 创建失败的处理,可能是内存不足等原因
// 可以在这里添加错误处理代码,如打印错误信息等
}
```
- **给出(释放)信号量**
- 二进制信号量创建后,默认是没有被获取的(空状态)。可以使用`xSemaphoreGive()`函数来释放信号量,使其变为满状态。例如,在一个任务中释放信号量:
```c
void vTaskFunction(void *pvParameters)
{
// 其他任务代码
// 释放信号量
if(xSemaphoreGive(binarySemaphore)== pdTRUE)
{
// 信号量释放成功的处理
}
else
{
// 信号量释放失败的处理,可能是信号量无效等原因
}
// 任务的其他代码
}
```
- **获取信号量**
- 另一个任务或者中断服务函数(在满足条件的情况下)可以使用`xSemaphoreTake()`函数来获取信号量。当信号量处于满状态时,`xSemaphoreTake()`函数会将信号量变为空状态,并允许任务继续执行。例如:
```c
void anotherTaskFunction(void *pvParameters)
{
if(xSemaphoreTake(binarySemaphore, portMAX_DELAY)== pdTRUE)
{
// 成功获取信号量,执行受信号量保护的代码段
// 例如访问共享资源等
// 完成后可以再次释放信号量,以便其他任务获取
xSemaphoreGive(binarySemaphore);
}
else
{
// 获取信号量失败的处理,可能是信号量为空且等待超时等原因
}
}
```
- **注意事项**
- 当在中断服务函数中使用信号量时,应该使用`xSemaphoreGiveFromISR()`函数来释放信号量,而不是`xSemaphoreGive()`。因为在中断服务函数中不能调用会导致阻塞的函数。`xSemaphoreGiveFromISR()`函数的使用稍微复杂一些,它需要一个额外的参数来指示是否需要进行任务切换。例如:
```c
void vISRFunction(void)
{
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
xSemaphoreGiveFromISR(binarySemaphore, &xHigherPriorityTaskWoken);
if(xHigherPriorityTaskWoken == pdTRUE)
{
// 请求任务切换,使等待信号量的高优先级任务能够尽快运行
portYIELD_FROM_ISR();
}
}
```
- 在使用二进制信号量进行任务同步或互斥时,要确保正确地初始化、释放和获取信号量,以避免出现死锁或资源竞争等问题。并且要根据具体的应用场景合理地设置信号量获取的等待时间,如使用`portMAX_DELAY`表示一直等待,直到信号量可用,或者使用其他较短的时间值来实现有限时间的等待。
- 2024-11-11
-
回复了主题帖:
LIN转串口的电压问题
LIN还需要转串口么?直接串个电阻,再弄个稳压管直接就进TTL引脚上去不就行了?