- 2025-04-08
-
回复了主题帖:
【N32H487开发板测评】+RTC电子时钟实现及多时段字幕提示
lugl4313820 发表于 2025-4-8 09:04
牛呀,看来学校的设备又提高档次了。
哈哈,尝试一下。
- 2025-04-07
-
发表了主题帖:
【N32H487开发板测评】+RTC电子时钟实现及多时段字幕提示
本帖最后由 jinglixixi 于 2025-4-8 11:05 编辑
N32H487内置了RTC计时器,通过配置和时间的设置可进行日历计时处理。
将它与前面介绍的点阵板显示功能相结合就可实现电子时钟功能及多时段字幕提示。
实现电子时钟显示功能的函数为:
void ShowTime(void)
{
RTC_GetTime(RTC_FORMAT_BIN, &RTC_TimeStructure);
if(p!=RTC_TimeStructure.Seconds)
{
sj[0]= RTC_TimeStructure.Hours/10;
sj[1]= RTC_TimeStructure.Hours%10;
sj[3]= RTC_TimeStructure.Minutes/10;
sj[4]= RTC_TimeStructure.Minutes%10;
sj[6]= RTC_TimeStructure.Seconds/10;
sj[7]= RTC_TimeStructure.Seconds%10;
p=RTC_TimeStructure.Seconds;
}
Display();
}
实现RTC配置及时间设置的主程序为:
int main(void)
{
RTC_DateAndTimeDefaultVale();
RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_PWR, ENABLE);
PWR_BackupAccessEnable(ENABLE);
if(SUCCESS==RTC_CLKSourceConfig(RTC_CLK_SRC_TYPE_LSE, true, false))
{
if (USER_WRITE_BKP_DAT1_DATA != RTC_BKUPRgRead(1))
{
RTC_DeInit();
RTC_PrescalerConfig();
RTC_DateRegulate();
RTC_TimeRegulate();
RTC_BKUPRgWrite(1, USER_WRITE_BKP_DAT1_DATA);
}
}
EXTI_ClrITPendBit(EXTI_LINE7);
EXTI_PA7_Configuration();
RTC_ConfigCalibOutput(RTC_CALIB_OUTPUT_1HZ);
RTC_ConfigOutputType(RTC_OUTPUT_PUSHPULL);
RTC_EnableCalibOutput(ENABLE);
dzb_Init();
ScanRow=0;
while (1)
{
ShowTime();
}
}
经程序的编译与下载,其计时显示效果如图1所示。
图1 计时效果
演示视频:
[localvideo]aa443b45a68a95a689874d1c53f4fc2c[/localvideo]
在配备汉字显示函数的情况下,它可实现指定信息内容的显示,相应的函数内容为:
void DisColC(int16_t lenght)
{
int16_t dat;
int8_t m=0;
while(lenght--)
{
dat=(ts[(s[m]+m)*32+ScanRow*2+1]<<8)+ts[(s[m]+m)*32+ScanRow*2];
OutByteP(dat);
m=m+1;
}
}
void DisplayP(void)
{
DisColC(4);
LEN_high;
LSTB_high;
LSTB_low;
SeleRow(ScanRow);
LEN_low;
ScanRow++;
if(ScanRow>15) ScanRow=0;
}
void ShowTime(void)
{
...
if(k==0)
{
cs=(RTC_TimeStructure.Hours<<8)+RTC_TimeStructure.Minutes;
if((cs==sd[k])&&(RTC_TimeStructure.Seconds==0))
{
//语音提示
playn(k);
ts_play();
//显示字幕
s[0]=0;
s[1]=0;
s[2]=0;
s[3]=0;
for(a=0;a<5000;a++)
{
DisplayP();
}
k=k+1;
}
}
...
}
图2 显示内容
- 2025-04-01
-
回复了主题帖:
【N32H487开发板测评】+点阵屏显示驱动篇
秦天qintian0303 发表于 2025-4-1 11:58
这个点阵屏是自带驱动器还是开发板直接驱动的?
有串并转换电路,需软件驱动。
- 2025-03-31
-
发表了主题帖:
【N32H487开发板测评】+点阵屏显示驱动篇
为了增强远距离的显示效果,这里选用一款P3.75的红色点阵板,其显示分辨率为16*64像素点,其外观如图1所示。
图1 点阵屏外观
该点阵板随使用的接口方式为HUB08,其各引脚的排列如图2所示。
图2 HUB08接口
点阵板与开发板的引脚连接关系为:
A ---- PE13
B ---- PE14
C ---- PE15
D ----PB10
R1 ---- PE9
CLK----PE10
OE ---- PE12
LAT---- PE11
所用引脚的工作模式配置函数为:
void dzb_Init(void)
{
GPIO_InitType InitStruct;
RCC_EnableAHB1PeriphClk(RCC_AHB_PERIPHEN_GPIOE,ENABLE);
InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
InitStruct.GPIO_Slew_Rate = GPIO_SLEW_RATE_FAST;
InitStruct.GPIO_Mode = GPIO_MODE_OUTPUT_PP;
InitStruct.GPIO_Alternate = GPIO_AF0;
InitStruct.GPIO_Pull = GPIO_NO_PULL;
InitStruct.GPIO_Current = GPIO_DS_8mA;
GPIO_InitPeripheral(GPIOE, &InitStruct);
RCC_EnableAHB1PeriphClk(RCC_AHB_PERIPHEN_GPIOB,ENABLE);
InitStruct.Pin = GPIO_PIN_10;
GPIO_InitPeripheral(GPIOB, &InitStruct);
}
点阵板发送数据的函数为:
void OutByte(uint16_t dat)
{
uint8_t i=0 ;
for(i=0;i<16;i++)
{
CLK_low;
if(dat&0x0001)
{
LR1_high;
}
else
{
LR1_low;
}
dat=dat>>1;
CLK_high;
}
}
发送多列数据的函数为:
void DisCol(uint16_t lenght)
{
uint16_t dat;
uint8_t m=0;
while(lenght--)
{
dat=(S[sj[m+1]*16+ScanRow]<<8)+S[sj[m]*16+ScanRow];
OutByte(dat);
m=m+2;
}
}
输出行地址的函数为:
void SeleRow(uint8_t Nd)
{
uint8_t N;
N=Nd;
N=N%16;
if(N&0x01) LA_high;
else LA_low;
if (N&0x02) LB_high;
else LB_low;
if (N&0x04) LC_high;
else LC_low;
if (N&0x08) LD_high;
else LD_low;
}
实现显示输出的函数为:
void Display(void)
{
DisCol(4);
LEN_high;
LSTB_high;
LSTB_low;
SeleRow(ScanRow);
LEN_low;
ScanRow++;
if(ScanRow>15) ScanRow=0;
}
模拟RTC计时效果的显示函数为:
void ShowTime(void)
{
sj[0]= 1;
sj[1]= 2;
sj[2]= 10;
sj[3]= 3;
sj[4]= 0;
sj[5]= 10;
sj[6]= 0;
sj[7]= 8;
Display();
}
实现显示输出的主程序为:
int main(void)
{
dzb_Init();
ScanRow=0;
while (1)
{
ShowTime();
}
}
经程序的编译与运行,其执行效果如图3所示。
图3 硬件连接及显示效果
-
回复了主题帖:
【N32H487开发板测评】+初识篇
Juggernaut 发表于 2025-3-31 21:06
没看到
哦,那就等后面的机会,有时会有返场的活动。
- 2025-03-30
-
发表了主题帖:
【N32H487开发板测评】+U盘读写功能测试篇
对开发板的性能来说,本人关注的一个指标就是其对U盘读写功能的支持性。对于N32H487开发板来说,它是提供这方面支持的,且提供了相应的例程以供验证。
对例程进行编译和下载后,在未连接U盘的情况下,通过串口可观察到其输出内容如图1所示。
图1 输出内容
在按图2所示进行U盘连接的情况下,也并无任何的反应。
图2 连接U盘
后来通过阅读readme才发现需要按KEY2键,才能对U盘进行文件读写。但在按下KEY2键后,依然无反应。
再细读readme,才发现该例程是针对N32H487ZEL7_EVB V1.1评估板板的,所所用的KEY2是与PA15相连的,而我们所用的N32H487ZEL7_STB V1.0开发板,其KEY2是与PA5相连的,为此需要按图3所示来连接一条导线来测试。
图3 按键原理图
图4 按键连接
此外,还有一个关键问题就是对VBUS驱动引脚的控制,对于N32H487ZEL7_EVB V1.1评估板板来说是所用
PE1引脚,而对于N32H487ZEL7_STB V1.0开发板来说,则是使用引脚PB3。
图5 U盘控制电路
在完成上述电路及程序的修改后,其测试效果如图6所示。
图6 测试内容
在按下KEY2键后,其输出内容如图7所示,说明程序可以进行读写处理了。
图7 输出内容
由输出内容看,在U盘上应创建一个名为N32.TXT的文本文件,但在打开U盘后,并没有见到这样的文件。
在更换其他U盘后,其测试结果如图8所示,说明它中途会呈现异常的崩溃现象。
图8 中途崩溃
不断更换U盘的情况下,终于见到了比较理想的结果,其内容如图9至图11所示,说明例程是比较挑盘的,且稳定性不够好。
图9 显示目录1
图10 显示目录2
图11 创建文件
在打开U盘后,终于见到了新创建的文件,见图12所示。
图12 文件及内容
从以下程序内容看,其内容似乎应该是“Nations Connectivity line Host Demo application using FAT_FS ”,写入文件的内容有些差强人意。
uint8_t writeTextBuff[] = "Nations Connectivity line Host Demo application using FAT_FS ";
case USH_USER_FS_WRITEFILE:
log_info("Press USER KEY to write file\n");
USB_BSP_mDelay(100ul);
/*Key in polling*/
u32DevConnectTmp = HOST_IsDeviceConnected(&USBHS_Core);
while((KEY_Press_Status_Get(KEY_BUTTON_GPIO_PORT, KEY_BUTTON_PIN)) && u32DevConnectTmp)
{
}
/* Writes a text file, N32.TXT in the disk*/
log_info("> Writing File to disk flash ...\n");
if(USBH_MSC_Param.MSWriteProtect == DISK_WRITE_PROTECTED)
{
log_info ( "> Disk flash is write protected \n");
USB_HOST_USER_AppState = USH_USER_FS_IDLE;
break;
}
/* Register work area for logical drives */
f_mount(&fatfs, "", 0u);
if(f_open(&file, "0:N32.TXT",FA_CREATE_ALWAYS | FA_WRITE) == FR_OK)
{
/* Write buffer to file */
bytesToWrite = (uint16_t)sizeof(writeTextBuff);
res= f_write (&file, writeTextBuff, (UINT)bytesToWrite, (void *)&bytesWritten);
if((bytesWritten == 0u) || (res != FR_OK)) /*EOF or Error*/
{
log_info("> N32.TXT CANNOT be writen.\n");
}
else
{
log_info("> 'N32.TXT' file created\n");
}
/*close file and filesystem*/
f_close(&file);
f_mount(NULL, "", 0u);
}
else
{
log_info ("> N32.TXT created in the disk\n");
}
/*close file and filesystem*/
f_close(&file);
f_mount(NULL, "", 0u);
}
else
{
log_info ("> N32.TXT created in the disk\n");
}
USB_HOST_USER_AppState = USH_USER_FS_IDLE;
break;
-
回复了主题帖:
【N32H487开发板测评】+初识篇
Juggernaut 发表于 2025-3-29 20:59
恭喜大佬获得好板
板子不错,没参加这个活动一起进行体验和感受?
- 2025-03-29
-
发表了主题帖:
【N32H487开发板测评】+初识篇
MCU N32H487开发板是一款基于Arm® Cortex®-M4F内核的开发工具,主频可达240MHz,并集成了512KB嵌入式Flash和196KB SRAM。此外,它还集成了USB FS Device等资源。
MCU N32H487开发板的外包装如图1所示,是一贯的简朴而大方的设计风格。
图1 外包装
打开外包装,其内部如图2所示,开发板是放在一个防静电袋内。
图2 内包装
此外,在缓冲支架下还配备了2条数据线,见图3所示,蓝色线主要是供电和下载,黑色线主要是供U盘转接来使用。
图3 附件
开发板的正反面如图4和图5所示,它主要是单面放置器件,但在背面放置一个纽扣电池座以供断电时维持RTC时钟。
图4 开发板正面
图5 开发板背面
在上电后如图6所示,除电源指示灯D4被点亮外,并无其它变化,经测试串口也没有其它的信息输出,应该是没有下载任何的出厂Demo。
图6 上电效果
从例程来看,它提供了丰富的功能支持,并支持以IAR和MDK来开发。
在使用MDK V5.36的情况下,其界面如图7所示。
图7 开发界面
在完成芯片支持包的安装后,可实现开发板的支持,见图8所示。
图8 芯片支持
在完成程序编译后,其效果如图9所示。
图9 完成编译
为进行程序调试和下载,其调试器类型如图10来选取。
图10 选取调试器
在连接开发板的情况下,其状态如图11所示,其烧录算法如图12所示。
图11 连接状态
图12 选取烧录算法
在完成下载后,其效果如图13至图15所示。首先是红蓝2个指示灯闪烁,然后是3个灯的流水灯效果。
图13 完成下载
图14 显示效果1
图15 显示效果2
-
回复了主题帖:
测评颁奖: NXP MCX A系列 FRDM-MCXA156开发板(含NXP官方福利礼品)
邮寄地址无误
- 2025-03-26
-
回复了主题帖:
【航芯ACM32F403开发板测评】+串口通讯与超声波测距
秦天qintian0303 发表于 2025-3-26 15:30
超声波测距主屏是多少?40k?
应该是40KHz的方波吧
-
发表了主题帖:
【航芯ACM32F403开发板测评】+串口通讯与超声波测距
ACM32F403提供了多个串口以供使用,其中串口2供程序的下载和测试来用。
此外,借助串口还可对串口设备进行控制。
这里是用它来控制超声波模块进行测距,对于目前的超声波模块有两类,一类的检测最小距离在20CM左右,另一类则在3CM左右,在使用时要十分注意。图1是一款具用串口通讯功能的检测模块,其最小距离为3CM。
图1 测距模块
以串口读取检测值的电路如图2所示,其中PA3接超声波模块的TX,PA2接串口模块的RX。图3是使用OLED屏来显示检测值。
图2 串口读取检测值
图3 OLED屏显示检测值
超声波测距模块的输出形式如图4和图5所示。
图4 字符输出方式
图5 HEX输出方式
以串口读取模块检测值的函数为:
void red_len (void)
{
for(;;)
{
HAL_UART_Receive(&UART2_Handle, gu8_RxBuffer, sizeof(gu8_RxBuffer), 200);
if(gu8_RxBuffer[0]==0x44)
{
HAL_UART_Transmit(&UART2_Handle, gu8_RxBuffer, UART2_Handle.lu32_RxCount, 0);
i=0;
n=UART2_Handle.lu32_RxCount;
printfS("LEN= %d\n", n);
HAL_UART_Transmit(&UART2_Handle, gu8_RxBuffer+2, UART2_Handle.lu32_RxCount-7, 0);
v=0;
n=n-5;
printfS("\n");
for(i=2;i<n;i++)
{
v=v*10+gu8_RxBuffer[i]-'0';
printfS("[%d]= %d \n", i,gu8_RxBuffer[i]-'0');
}
printfS("len2= %d cm \n", v);
}
memset(gu8_RxBuffer, 0, sizeof(gu8_RxBuffer));
}
}
实现距离检测的主程序为:
int main(void)
{
System_Init();
Uart_Init();
red_lent();
while(1)
{
}
}
经程序的编译和下载,其测试结果如图6所示,说明对数据的提取正确。
图6 测试结果
在此基础上,经程序的修改可实现基于超声波模块的水位检测、水位设置、温度模拟检测及温度模拟设置,其测试结果如图7至图9所示。
图7 设置水位及温度限值
图8 模拟水位控制
图9 模拟温度控制
利用这种串口模拟测试的手段,大大地节省了测试的开销,是一种高效的测试方式。
- 2025-03-25
-
回复了主题帖:
【航芯ACM32F403开发板测评】+NTC温度检测及PTC加热台控制
mskw 发表于 2025-3-25 18:44
学习了,多谢大师
哈哈,同道而已。
-
回复了主题帖:
测评入围名单: 国民技术高性能MCU N32H487开发板
个人信息无误,确认可以完成测评分享计划。
-
回复了主题帖:
【航芯ACM32F403开发板测评】+NTC温度检测及PTC加热台控制
本帖最后由 jinglixixi 于 2025-3-25 21:02 编辑
秦天qintian0303 发表于 2025-3-25 08:53 说实话不太好调,ti好像有个标准末班,该参数就行
以前看它们用仿真软件设参数后看前行变化趋势来定方案,后来就没再接触。
但没有PID调节,其温度的滞后效应很严重,在断电后依然会再爬升几度。
-
回复了主题帖:
【航芯ACM32F403开发板测评】+NTC温度检测及PTC加热台控制
秦天qintian0303 发表于 2025-3-24 21:54
没加个PID控制啊
应该加,没做过需要充电。
- 2025-03-24
-
回复了主题帖:
>>征集 | 晒电机控制痛点与难题,一起寻求最优解!
痛点问题可以为:芯片选型、效率优化、控制精度、抗干扰性、成本控制、算法、安全、电磁干扰、热管理、工具使用等开发相关内容。
目前市面上有不少电机控制板,通过这种控制板可以大大地化解驱动的难度和问题。但在实际使用时,也存在一些问题,就是在使用时需要掌握一些电机的参数及参数配置的知识,没有这方面的支持,也是存在一定
障碍的,自己就曾为体验某家电机控制板的性能,而购置直流无刷电机,接上后,通过调节电位,电机也能够转动,但电机转速的调节范围很窄,转速不是很丝滑,甚至会出现一定的特动。但想要调节参数时却发现,该电机却没有配置相应的名牌,没有相应的参数支持也就无法达到运行品质的提高,这便是痛点问题之一,若是在电机控制板上配置相应的参数检测功能,实现参数的自匹配来优化运行品质将是一件非常有意义的事情。
-
发表了主题帖:
【航芯ACM32F403开发板测评】+NTC温度检测及PTC加热台控制
本帖最后由 jinglixixi 于 2025-3-24 17:25 编辑
前面曾介绍过单通道的A/D检测方法,将它与NTC热敏电阻相结合即可进行温度测控。
为此,这里是选取通道1来连接NTC进行温度检测,即用PA7来连接NTC的模拟信号输出端。
为指示控制状态,是通过板载的LED( PF3),点亮时为加热的状态,熄灭时表示停止状态。
实现温度检测的功能函数为:
void ADC_Test_Polling_Nchannels(void)
{
uint32_t i, VrefP, Voltage;
uint32_t lu32_COM_OK = 0;
uint32_t t;
VrefP = ADC_GetVrefP(ADC_CHANNEL_8);
ADC_Init_Polling_Nchannels();
while(1)
{
System_Delay_MS(500);
for (i = 0; i < BUFFER_LENGTH; i++)
{
gu32_AdcBuffer[i] = 0;
}
HAL_ADC_Polling(&ADC_Handle, gu32_AdcBuffer, ADC_Handle.ChannelNum, 0);
for (i = 13; i < 14; i++)
{
Voltage = (gu32_AdcBuffer[i]&0xFFF)*VrefP/4095;
t=bh(Voltage);
if(t>26)
{
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_3, GPIO_PIN_SET);
OLED_ShowString(80,6,"OF",16);
}
else
{
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_3, GPIO_PIN_CLEAR);
OLED_ShowString(80,6,"ON",16);
}
OLED_ShowNum(80,2,t,3,16);
}
}
}
实现温度测控的主程序为:
int main(void)
{
System_Init();
Uart_Init();
Oled_Config();
OLED_Init();
OLED_Clear();
OLED_ShowString(10,0,"Simulation",16);
OLED_ShowString(0,2,"h= t=",16);
OLED_ShowString(0,4,"H= T= 26",16);
OLED_ShowString(16,6,"OF OF",16);
JDQ_Init();
ADC_Test_Polling_Nchannels();
while(1)
{
}
}
经程序的编译和下载,其测试结果如图2和图3所示。
图2 线路连接
图3 温度测控
图4 PTC加热控制
- 2025-03-21
-
回复了主题帖:
【新年花灯】莫负时光砥砺前行
本帖最后由 jinglixixi 于 2025-3-21 20:40 编辑
图1 器件布局
图2 器件连接关系
图3 开发板PCB
参考程序:
void GPIO_config(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //结构定义
GPIO_InitStructure.Pin = GPIO_Pin_All; //指定要初始化的IO, GPIO_Pin_0 ~ GPIO_Pin_7, 或操作
GPIO_InitStructure.Mode = GPIO_OUT_PP; //指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
GPIO_Inilize(GPIO_P1,&GPIO_InitStructure); //初始化
GPIO_Inilize(GPIO_P3,&GPIO_InitStructure);
}
/******************** 主函数 **************************/
void main(void)
{
u8 i,tmp;
GPIO_config();
while(1)
{
tmp = 1;
for(i=0; i<8; i++)
{
P3 = ~tmp;
tmp <<= 1;
delay_ms(250);
}
...
tmp = 0x80;
for(i=0; i<8; i++)
{
P3 = ~tmp;
tmp >>= 1;
delay_ms(250);
}
...
}
}
- 2025-03-18
-
回复了主题帖:
【泰坦触觉 TITAN Core开发套件】无线通讯在触觉感知控制器中的使用
freebsder 发表于 2025-3-18 17:14
这是命题作文?
有创意DIY参考建议
-
回复了主题帖:
【泰坦触觉 TITAN Core开发套件】无线通讯在触觉感知控制器中的使用
Jacktang 发表于 2025-3-18 07:45
毕竟也用NRF2401模块实现了触觉感知无线控制功能,还行
哈哈,慢慢改进提高吧!