Rain_Personal
发表于 2024-4-28 18:49:07
第十八课ADC采集电源电压和ADC按键
目的:检测电源电压
CHIPID7内部1.19V参考电压
CHIPID8内部1.19V参考电压
ADC的第15通道会形成固定的1.19V,采集ADC时,会将1.19V转换为参考值比如2048,此时可以根据这个反推Vref参考电压
2048 = 1.19/Vref*4096===>Vref = 1.19/0.5 = 2.38V
ADC按键的原理是,读取ADC的值,判断ADC值,不同的按键会又不同的ADC值,进而判断那个键按下。
Rain_Personal
发表于 2024-4-28 20:45:37
本帖最后由 Rain_Personal 于 2024-5-15 20:42 编辑
第十九课 NTC温度采集
1. NTC原理
NTC(Negative Temperature Coefficient)是指随温度上升电阻呈指数关系减小、具有负温度系数的热敏电阻现象和材料。该材料是利用锰、铜、硅、钴、铁、镍、锌等两种或两种以上的金属氧化物进行充分混合、成型、烧结等工艺而成的半导体陶瓷,可制成具有负温度系数(NTC)的热敏电阻。其电阻率和材料常数随材料成分比例、烧结气氛、烧结温度和结构状态不同而变化。现在还出现了以碳化硅、硒化锡、氮化钽等为代表的非氧化物系NTC热敏电阻材料。
检测电阻就可以获取当前温度
横坐标温度,纵坐标电阻
Vout可以根据ADC值测得
那么NTC的电阻R2 = Vout*R1/(Vin-Vout)
再根据R2~温度 反推出来温度。
跳线帽链接红色圆圈中左边两个阵脚,就可以使用NTC测温了,通过手触摸蓝色NTC电阻,就可以改变温度数值,检测对错
Rain_Personal
发表于 2024-4-29 19:36:27
第二十课 串口通信
1. 串口通信是将两个设备通过一定的协议进行信息交换。
并行通信和串行通信:每次发送一位数据的称为串行通信,多位一起传输的称为并行通信。
串口通信(Serial Communication), 是指外设和计算机间,通过数据信号线 、地线、控制线等,按位进行传输数据的一种通讯方式。这种通信方式使用的数据线少,在远距离通信中可以节约通信成本,但其传输速度比并行传输低。
接线方式:
接受时钟和发送时钟不一定相同,只要相近就可以的属于异步通讯。接收时钟与发送进钟严格同步,通常要有同步时钟。
全双工 半双工和单工的区别,根据用的几条线,单工是单向发送,只能发不能回。
波特率 表明每秒钟可以发送的数据 例如9600波特率,表示每秒可以发送9600位数据。
串口通讯的距离比较短,一般解决方法为添加专用芯片
应用:通过串口转以太网,WIFI,蓝牙,zigbee等可以做成路由器,网络插座,智能手环等设备。
2. STC32的串口引脚
手册是需要熟练掌握的信息!
实验箱中电路图:
Rain_Personal
发表于 2024-5-5 14:09:09
本帖最后由 Rain_Personal 于 2024-5-15 17:58 编辑
哈哈哈,好事发生,给自己放个假
准备回归工作生活,再琢磨琢磨串口通信问题。
Rain_Personal
发表于 2024-5-8 20:58:28
Rain_Personal 发表于 2024-4-25 17:39
第四课 新建工程并点亮LED灯
上节课未吃透所遇问题
有点难度,现在都没调试完,怎么自动上电下载程序
电子爱好者2024
发表于 2024-5-9 22:42:51
学习
Rain_Personal
发表于 2024-5-15 21:18:17
本帖最后由 Rain_Personal 于 2024-5-16 22:04 编辑
第二十一课串口应用
串口2的启用方法
void Usart2_Init(void)
{
P_SW2 = 0X80;
P_SW2 |= 0X01; //将串口2 的引脚切换到P46 P47 0X00P10 P11
S2CFG = 0X01;
S2CON = 0X50;
T2L = BRT;
T2H = BRT>>8;
T2x12 = 1;
T2R = 1;
wptr = 0x00;
rptr = 0x00;
busy = 0;
}
void Usart_Isr() interrupt 8
{
if( S2TI )
{
S2TI = 0;
busy = 0;
}
if( S2RI )
{
S2RI = 0;
buffer = S2BUF;
wptr &= 0X0F;
}
}
void Usart2_Send(char dat)
{
while(busy);
busy = 1;
S2BUF = dat;
}
void Usart2_SendStr(char *p)
{
while(*p)
{
Usart2_Send(*p++);
}
}
其中S2BUF 为寄存器地址,可以用于读取和写入
Rain_Personal
发表于 2024-5-17 21:45:02
第二十二课 CDC串口通信
无需USB转TTL工具!P30和P31连接电脑D-和D+
STC32G128K支持自动烧录
具体方法之前探索过,流程如下
1)下载.lib库和头文件
2)新建工程,加载lib库文件
3)调用头文件并初始化USB功能
4)设置工程参数,编译选项等
5)首次下载手动进入HID下载模式下载
6)下载完成等待生成CDC串口号,设置ISP软件参数
执行完如上步骤,再也不需要手动进下载模式了,只要ISP软件点一下下载程序就可以自动烧录。
Rain_Personal
发表于 2024-5-17 21:57:06
第二十三课 看门狗
复位的主要作用是把单片机内部的特殊功能寄存器置于初始状态,使单片机硬件、软件从一个确定的、唯一的起点开始工作。
看门狗是一个计数器,它的基本功能是在软件问题和程序跑偏后重启系统。看门狗正常工作时会自动计数,程序进程会定时将其归零。如果系统在某个地方卡住了或者跑了,定时器就会溢出,是系统强制复位。
检测bug和意外
软件的可靠性一直是一个关键问题。任何使用软件的人都可能遇到电脑死机或程序失控的问题,这种问题在嵌入式系统中也存在。由于单片机抗干扰能力有限,在工业现场仪器仪表中,经常因电压不稳和电弧干扰而死机。在水表、电表无人值守的情况下,系统因干扰无法重启。为了保证系统在受到干扰后能自动恢复正常,看门狗定时器的使用是非常有价值的。
提高单片机运行可靠性
WDT_CONTR寄存器操作看门狗
CLR_WDT = 1表示喂狗
Rain_Personal
发表于 2024-5-18 11:52:11
第二十四课 比较器
void CMP_Init(void)
{
CMPEXCFG = 0x00;
CMPEXCFG |= 0xc0; //比较器DC迟滞输入选择,0:0mV; 0x40:10mV; 0x80:20mV; 0xc0:30mV
//CMPEXCFG &= ~0x04; //P3.6为CMP-输入脚
CMPEXCFG |= 0x04; //内部1.19V参考电压为CMP-输入脚
CMPEXCFG &= ~0x03; //P3.7为CMP+输入脚
//CMPEXCFG |= 0x01; //P5.0为CMP+输入脚
//CMPEXCFG |= 0x02; //P5.1为CMP+输入脚
CMPEXCFG |= 0x03; //ADC输入脚为CMP+输入脚
CMPCR2 = 0x00;
INVCMPO = 0; //比较器正向输出
//INVCMPO = 1; //比较器反向输出
DISFLT = 0; //使能0.1us滤波
//DISFLT = 1; //禁止0.1us滤波
//CMPCR2 &= ~0x3f; //比较器结果直接输出
CMPCR2 |= 0x10; //比较器结果经过16个去抖时钟后输出
CMPCR1 = 0x00;
//PIE = 0; //禁止比较器上升沿中断
PIE = 1; //使能比较器上升沿中断
//NIE = 0; //禁止比较器下降沿中断
NIE = 1; //使能比较器下降沿中断
//CMPOE = 0; //禁止比较器输出
CMPOE = 1; //使能比较器输出
CMPO_S = 0; //选择P3.4作为比较器输出脚
//CMPO_S = 1; //选择P4.1作为比较器输出脚
CMPEN = 1; //使能比较器模块
}
sbit LED0 = LED_DATA^0; # LED0引脚的定义
void CMP_Isr() interrupt 21
{
CMPIF = 0; //清中断标志
if( CMPRES ) //等于1 正端电压大于负端
{
}
else
{
}
LED0 = CMPRES; //中断方式读取比较器比较结果
}