- 打卡等级:常住居民III
- 打卡总天数:130
- 最近打卡:2025-05-07 18:17:53
中级会员
- 积分
- 375
|
发表于 2024-8-26 07:29:55
|
显示全部楼层
本帖最后由 阿杰爱学单片机 于 2024-8-26 11:36 编辑
第四集下(2)
在论坛大佬的帮助下终于解决问题了,也是非常感谢他。
续上集虽然代码没有问题,但我遗漏了一个很重要的点,就是Keill没有设置好,还有就是没看手册(可能我太信任冲哥了,一直觉得是我代码敲漏了),个大家提个建议还是要看看手册。
这是keill的设置截图
这里设置错了,第一个框的data应该改成near,后面57和指令二选一
这是最后实验现象
函数已经被我包装了,可以拿去做成模块,直接用
两种下载代码差不多,就有一个地方需要变动2行代码
// @阿杰爱学单片机 2024/08/025
// 不停电下载示例:USB-CDC方式,PC端发送指令,触发MCU复位并自动下载
// 使用STC-ISP软件,点击发送用户自定义命令并开始下载,
// 或点击下载按钮,即可自动下载,无需按住P3.2和OFF按键(第一次下载需要按P3.2和OFF)
// 实验开发板:STC32G12K128屠龙刀三.1 主频@24MHz
#include <STC32G.H>
#include "usb.h"
#define MAIN_Fosc 24000000UL //定义主频24MHz
void SYS_Init(void); // STC32初始化设置
void MyUSB_Init(void); //USB不断电下载配置初始化设置
void GPIO_Init(void); //IO口初始化设置
//------USB调试及复位所需定义-----
char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#"; //设置自动复位到ISP区的用户接口命令
void main(void) //主函数(程序从这里执行)
{
SYS_Init(); // STC32初始化
MyUSB_Init(); //USB初始化
GPIO_Init(); //IO口初始化
while(1)
{
P2=0x00;//P2整体赋值为0,P2整体输出低电平8LED全亮
}
}
void SYS_Init()
{
EAXFR = 1; // 使能访问 XFR
CKCON = 0x00; // 设置外部数据总线速度为最快
WTST = 0x00; // 设置程序代码等待参数,等待时间为0个时钟,CPU执行程序速度最快
}
void GPIO_Init(void)
{
P2M0=0x00; //P2设置为准双向口
P2M1=0x00;
}
void MyUSB_Init(void)
{
//------USB调试及复位所需代码-----
P3M0 &= ~0x03;
P3M1 |= 0x03;
IRC48MCR = 0x80; //使能内部48M高速IRC
while (!(IRC48MCR & 0x01));//等待时钟稳定
//CDC下载需要用下面这两行,若使用HID下载请屏蔽//
USBCLK = 0x00;
USBCON = 0x90;
usb_init(); //usb初始化
//--------------------------------
EA = 1; // 使能EA总中断
}
|
|