JL1 (JL3) GRBL firmware avialable

You may actually did complete the flashing. I recall that I was also confused for a moment and thought I bricked it, but after reboot it was alive and reporting itself as GRBL.

I recall after successful flashing and normal boot it is indeed no longer homing on power up. If so - try some GRBL control software, like LaserGRBL. Or some terminal for that matter, send $ or $$ and enter (there is no echo from GRBL, so you will type blind, unless your terminals is setup with echo).

For terminal: 115200 bod, 8n1, no flow.

Do full cold reboot: pull usb and turn power off, then back.

I deleted the original upgrade zip. I’m on a windows machine I never use so I can run that idiot software.

I tried to get any kind of response from it, but it won’t even put out a boot message. Tried it in a dumb terminal.

I think I hosed up the boot loader, it just isn’t talking…


Do you have ST Link? Or at least soldering iron to boot it into serial boot loader?

If you really hosed up your boot loader - the best way is to get yourself ST-Link/V2 clone of Amazon, about $10, and hang on for a few days. I hope I will compile proper firmware in a few days. I’m almost done, all works except PWM for spindle/laser. I’m fighting with moving TIM1 PWM from standard A8 port to B0. HAL stuff involved (“partial remapping”) and I’m trying to sort it out. If anybody can help - I would appreciate that. With some luck I will try to post my version in a few days.

One more possibility: Do you have WiFi linked up before flashing? See if WiFi still connects? Maybe try over web socket or telnet?

Never tried wifi, but I don’t see any kind of ‘new’ wifil signal …

St-link … I think I downloaded it and compiled it…

I found these…

jack@Kilo:~/stlink.git/build/Release/bin$ ls -l
total 212
-rwxrwxr-x 1 jack jack 30960 Aug  8 19:45 st-flash
-rwxrwxr-x 1 jack jack 17256 Aug  8 19:45 st-info
-rwxrwxr-x 1 jack jack 26640 Aug  8 19:45 st-trace
-rwxrwxr-x 1 jack jack 66512 Aug  8 19:45 st-util
-rwxrwxr-x 1 jack jack 23664 Aug  8 19:45 test-flash
-rwxrwxr-x 1 jack jack 17096 Aug  8 19:45 test-sg
-rwxrwxr-x 1 jack jack 17608 Aug  8 19:45 test-usb

This is the output of test-flash

jack@Kilo:~/stlink.git/build/Release/bin$ ./test-flash
[OK] (-1) 
[OK] (0) --debug --reset read test.bin 0x80000000 0x1000
[OK] (0) --debug --reset write test.bin 0x80000000
[OK] (0) --debug --freq 5k --reset write test.bin 0x80000000
[OK] (0) --debug --freq 15k --reset write test.bin 0x80000000
[OK] (0) --debug --freq=5k --reset write test.bin 0x80000000
[OK] (0) --debug --reset read test.bin 0x80000000 1000
[OK] (0) --debug --reset read test.bin 0x80000000 1k
[OK] (0) --debug --reset read test.bin 0x80000000 1M
[OK] (0) --debug --reset write test.bin 0x80000000
[OK] (0) erase
[OK] (0) --debug --reset --format=ihex write test.hex
*** Error: Expected args for this command: write <path> <addr>
[OK] (-1) --debug --reset --format=binary write test.hex
*** Error: Expected args for this command: write <path>
[OK] (-1) --debug --reset --format=ihex write test.hex 0x80000000
*** Error: Invalid value for addr
[OK] (-1) --debug --reset write test.hex sometext
[OK] (-1) --serial ABCEFF544851717867216044 erase sometext
[OK] (0) --serial ABCEFF544851717867216044 erase
[OK] (0) --serial=ABCEFF544851717867216044 erase

Clueless with these… I did install one of the IDE and loaded a stm32 grbl code, but it’s got configuration issues… Eclipse…


O boy, I’m afraid it is really messed up now.
Jack, STLink is hardware dongle to flash/debug STM32 chips. Get one if you want less painful recovery from hosed boot loader.

First tell me the truth, did you try to upload bin with some other/Linux uploader? I’ve tried to flash that BIN to Blue Pill and it never run. I did warn about that. But flashed with Uploader app to JL1 it runs - no problem.

I can try to dump the flash, if it is not locked, then it might be possible to restore. I will try and let you know.

Now, compiling from the source:
pin map is different. I have moved all pins around - no problem, except PWM . That is stubbornly non-functional on B0. Everything else, including motors, remapped with no issues.

If you managed to remap successfully, especially Spindle Speed pin - please let me know how you managed to do “partial remap” for TIM1.

Below is my map for JL1:

// Port A === Port B
// 0 X_STEP_BIT===
// 1 Y_STEP_BIT===
// 2 Z_STEP_BIT===
// 9===
// 10 === X_LIMIT_BIT
// 11 === Y_LIMIT_BIT
// 12 === Z_LIMIT_BIT

// JL1 Laser Controller
// Port A ===Port B
// 1 COOLANT_MIST_BIT (unused) === reserved (boot1)
// 2 reserved for UART2/ESP ===
// 3 reserved for UART2/ESP ===
// 7 BUTTON ===
// 8 ? === Y_STEP_BIT
// 9 reserved for UART1 === X_STEP_BIT
// 10 reserved for UART1 === reserved for UART3
// 11 X_LIMIT_BIT (USB) === eserved for UART3
// 12 Y_LIMIT_BIT (USB) ===CS eeprom
// 13 reserved (link SWDIO) === CLK eeprom
// 14 reserved (link SWCLK) ===MISO eeprom
// 15 ?===MOSI eeprom

To flash over serial - you need to strap couple pins (boot0 and boot1) and configure flasher. It also appeared that start address is missing from your command.
No cost flashing need soldering. No soldering - need STLink dongle. Well, you still need to solder 4-pin header that is missing form the board, but this is really easy.

Do you have a link on how to do this…?

Anything would be good… :slight_smile:

It sat here until I got the upgrade program and binary a few days ago.

Only used the few programs listed to see if it could talk at all… Just invoked the ‘test-flash’ without any parameters… Do you think it is going out to the board?

It was hosed as soon as I ran the upgrade, without the power/button sequence… Never has booted properly and the laser is ‘on’ all the time… don’t know what power level…


Can you solder?
At very least I would advice you to spend $10 on STLink V2 and have some patience.
I just confirm that 4-pin header is working STLink interface. I’m trying to do the dump and copy. (to copy working JL1 to Blue Pill). Will report if sucsesful. If so - we will have safe recovery option for all.
You also need to solder 4-pin header into the board and to have 4pin jumper cable female to female.

I will provide instructions when I have all files ready.

Y’all: does anybody able to successfully flash their JL1 to GRBL?

Not able to dump flash as it is protected.
While messing with it - after toggling protection bit back and forth - my JL3 GRBL firmware is no longer booting. Yep, I’ve bricked it. Later found here:https://chowdera.com/2021/04/20210426103900089b.html
that flash will be erased on unlock, all Fs now. Exactly what happened.

Oh well, even more pressure to get recompiled version working.
At least I can confirm that hardware is wide open, that 4-pin header is STLink port and flashing with STLink is trivial. Just need new firmware.
Fun Sunday!

I will post when progress is made.

1 Like

I’ve used a few micros and all of them will allow you lock portions of the memory/flash. Else, someone can just copy it off and disassemble the code.

On the 320p (Arduino) you can lock it up where you need a high voltage programmer to ‘un brick’ or reprogram the chip. I’ve got over a dozen donated 328’s that were ‘bricked’ inadvertently.

If I can, I’ll try to recover it for them and I put it in the programmer and rewrite the boot loader, usually recovers. If it’s a smd, sometimes you’re sol…

Chuck it up to ‘live and learn’…

I’ll probably order a programmer. I have a pair of Dragon (obsolete) programmers for the atmel series. I guess they are now 'microchip …


Have this ordered, here in a couple of days…

This utility is available on my Ubuntu box… It’s in the Ubuntu respository you can use the standard apt software to install it.


can you upload the .bin or .hex file that you used?



I’m glad to see that many people are able to successfully flash that JL3 GRBL firmware to their JL1 machines.

I have compiled new firmware specifically for JL1 where everything works, I think, except PWM on port B0, that is spindle/laser PWM control. Something with timer 1 partial remap and timer output control registers. I’m still sorting through it. For ethical reasons I do not want to let firmware loose in the wild that is definitely not usable. I mean I guess it is possible to just jump A8 to that laser control pin and have complete functionality this way. It would be ugly hack due to lack of software skills, but hey, whatever works, right. So let me try it and if it works - I will consider it. I can feel sentiment for you, sitting with dead board can’t be fun.
Another option is to take this journey solo, like I’m trying to do now.

I got " RepRapThailand / grbl-stm32" on GIT as starting point, mostly because Embitz IDE is much lighter than Cube or Atollic and does not go to the cloud every minute. Also this was the first package of many for STM32 that I’ve tried and that compiled cleanly right away without single warning. If you are Linux fan - there is version for that. It also has built in flashed for STLink, very convenient.
To start - remap pins in cpu_map.h . May use map I’ve posted earlier.
After that - everything works except Spindle/Laser PWM .
There is also bunch of unused signals. I’ve deleted definitions for all unused pins and progressively prune the whole source code for each error/warning for any call that uses these signals.
Now I have just the set of functions/pins I need. Only hardware PWM not so easy to move.
Now this board happily converses with any software that supports GRBL and as much as I see on the scope - it has what appeared to be the right signals for steppers.
Almost there.
You may replicate my journey or wait till I complete mine.

I’m not a software engineer. I’m barely a hobbyist, and I’m having fun with it.

Any other developers with proper skill set - welcome to help.


@berainlb makes an interesting point here

The photo in post 6 shows the controller and the cpu was tagged as an APM32, which does exist and if @berainlb is correct, it is likely some type of commercial atm32 clone or something. Sounds like the binary will run on either… ?

Do you have a header file or something with the changes to the pins in it? Which pin is the jl1 using for pwm control ?

Any road maps of the board you have would be good, even it it’s this pin does this…

Cloned the github project… Do you have any details on what you have changed so far?

I have another controller on the way from China… It would be nice to use the existing hardware…

My st-link programmer is supposed to be here today…


1 Like

I just want to let you know, that I found an easier resolution of my problem: I’ll return the small K6-engraver an order another product, which explicitly mentions lightburn. It uses GRBL and has a more than 4 times bigger engraving-capability. By the way, the laser is also about twice as intense.
Thanks for your input. Maybe my pic of the K6-board helps someone.

It already has … thanks

Is it twice the price?

Sometimes that’s a good solution. The jl1 I have was dirt cheap and a hobbyist might end up with a nice machine at a low price. But they have ‘sweat’ equity in it.

Good luck


NO. It is not twice the price, “only” about 1.6 times.

Can you post the binary for what you have loaded? :pray:

I have the st-link working and have loaded the original files, both the bin and hex, but it won’t talk to anything on the serial port. I think you had that issue.

It would be much easier if you could post it what you have and I’ll try that binary…

Getting a message of any kind would be a step up…



What you want to do? Just test if you can flash? See serial talking GRBL? Move any motor? Laser control?

I have one that talks serial and I see pulses on motor control. Just tried to upload to JL1 and apparently something is off as I do not see motors moving, I thought they will. I can give you hex to test your uploader and talk to GRBL, not so far nothing beyond that. I would be able to move motors soon. I’m still struggling with PWM for laser control.

That would be great… At least I’ll know some part of it is working.

Can you post the .h file you have modified?

I just add a .txt to whatever the filename is and it will upload it…