ECE3730J RC2_Input_Capture

Input Compare Module

IC is a peripheral that can monitor the input signal change (pos/neg edge) independent of the processor (Core).

![[Pasted image 20240617150723.png]]
You can consider IC as a timer value recorder. It will record the timer value each time the capture condition is met.

For detailed configuration, please refer to Reference Manual.pdf on canvas, page 349-359, 382-385.

Some useful documentation on the configuration register:
![[Pasted image 20240617155913.png]]
![[Pasted image 20240617155926.png]]
![[Pasted image 20240617155935.png]]

ECE3730J RC2

![](Pasted image 20240616202750.png)
Basically, we are using MCU to communicate with the LCD controller (HD44780).

Datasheet for HD44780: https://www.sparkfun.com/datasheets/LCD/HD44780.pdf

LCD Controller Pin

  1. VSS (Pin 1): Ground (GND).
  2. VDD (Pin 2): Power supply (usually +5V).
    Note: If you use J-link debugger to power the board, the output voltage at +5V pin will not be 5V, maybe around 2.8V, so remember to use the 5V power supply wire to power the board.
  3. VO (Pin 3): Contrast adjustment pin. Usually connected to a potentiometer to adjust the contrast.
  4. RS (Pin 4): Register select pin. Low for instruction register, high for data register.
  5. RW (Pin 5): Read/Write pin. Low for write operation, high for read operation. Usually grounded (write mode).
  6. E (Pin 6): Enable pin. The LCD controller only captures (grabs) the data presented at its register lines(D0-D7) only when the E pin “transitions” from high to low.
  7. D0-D7 (Pins 7-14): Data bus pins. Used for communication with the microcontroller in either 4-bit (D4-D7) or 8-bit (D0-D7) mode.
  8. A (Pin 15): For the backlight. Typically connected to +5V.
  9. K (Pin 16): For the backlight. Typically grounded (GND).

Connection with STM32

![](Pasted image 20240616210515.png)

Some Useful Charts

From datasheet

  1. Four operation
    ![[Pasted image 20240616212637.png]]
    IR: instruction register
    DR: data register

In this Lab, we will mainly use the first and third operation

  1. Instruction
    ![[Pasted image 20240616212934.png]]
    ![[Pasted image 20240616213009.png]]

  2. DDRAM
    ![[Pasted image 20240616214538.png]]

  3. CGRAM
    ![[Pasted image 20240616215520.png]]

Application Example

Send Command to LCD Controller

Recall the operation:
![[Pasted image 20240616220104.png]]

  1. Set the pin of RS & R/W to low.
  2. Set E to high, preparing for the data transfer.
  3. Set D7-D0 to the desired instruction(8-bit).
  4. Set E to low

Sample code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void LCD_Write_Command(uchar Com) {
Delay_ms(10);
HAL_GPIO_WritePin(GPIOB, LCD_RS_Pin, GPIO_PIN_RESET); // LCD_RS = 0;
HAL_GPIO_WritePin(GPIOB, LCD_RW_Pin, GPIO_PIN_RESET); // LCD_RW = 0;
HAL_GPIO_WritePin(GPIOB, LCD_E_Pin, GPIO_PIN_SET); // LCD_E_Pin = 1;
Delay_ms(1); // wait for tpw;

LCD_PORT = Com;// put command on the bus

HAL_GPIO_WritePin(GPIOB, LCD_E_Pin, GPIO_PIN_RESET); // LCD_E_Pin =0;
Delay_ms(1); // wait for tpw;

}

Write Data To DDRAM

Recall the operation:
![[Pasted image 20240616222832.png]]

  1. Set the pin of RS to high and R/W to low.

  2. Set E to high, preparing for the data transfer.

  3. Set D7-D0 to the desired address.
    ![[Pasted image 20240616223239.png]]

  4. Set E to low

Sample code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void LCD_Write_Data(uchar dat) {
Delay_ms(1);

HAL_GPIO_WritePin(GPIOB, LCD_RS_Pin, GPIO_PIN_SET); // LCD_RS = 1;
HAL_GPIO_WritePin(GPIOB, LCD_RW_Pin, GPIO_PIN_RESET); // LCD_RW = 0;
HAL_GPIO_WritePin(GPIOB, LCD_E_Pin, GPIO_PIN_SET); // LCD_E_Pin = 1;
// Delay_ms(1);

LCD_PORT = dat; // put data on the bus

HAL_GPIO_WritePin(GPIOB, LCD_E_Pin, GPIO_PIN_RESET); // Set LCD_E = 0;

Delay_ms(1); // wait for tpw;
}

Init LCD

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#define LCD_2_LINE_4_BITS 0x28
#define LCD_2_LINE_8_BITS 0x38
#define LCD_DSP_CSR 0x0c
#define LCD_CLR_DSP 0x01
#define LCD_CSR_INC 0x06

void LCD_init(void)
{
LCD_Write_Command(LCD_2_LINE_8_BITS); // function set -8 bit interface
Delay_ms(5);
LCD_Write_Command(LCD_2_LINE_8_BITS);

LCD_Write_Command(LCD_CLR_DSP); // clear display
Delay_us(100);
LCD_Write_Command(LCD_CSR_INC); // Set entry mode: increment
Delay_us(100);
LCD_Write_Command(LCD_DSP_CSR); // open display, close cursor
}

Display Charactor

First we need to set the cursor position

The cursor position is basically the DDRAM address that you want to write data in, which is corresponding to the display location on LCD screen.

1
2
3
4
5
6
7
8
9
void LCD_Set_Position(uchar x, uchar y) {
if (y == 0) // first line
{
LCD_Write_Command(0x80 + x);
} else if (y == 1) // second line
{
LCD_Write_Command(0xc0 + x);
}
}

If we want to display a character at first line, first column:

1
LCD_Set_Position(0,0);

Then, we need to write data into DDRAM[addr] to tell the LCD which character you want to display, for example “J”.

1
LCD_Write_Data("J"); // send the ascii code

Putting them all together:

1
2
3
4
5
void LCD_Display_Char(uchar Char, uchar x, uchar y)
{
LCD_Set_Position(x, y);
LCD_Write_Data(Char);
}

Display String

The cursor will shift right (because we set increment entry mode) after each write_data operation, so displaying a string is quite simple.

1
2
3
4
5
void LCD_Display_Char(uchar Char, uchar x, uchar y) // 显示字符ASCII码
{
LCD_Set_Position(x, y);
LCD_Write_Data(Char);
}

Demo

ECE3730J RC2_Output_Compare

Output Compare Module

OC is a peripheral that can generate precise output signal independent of the processor (Core).

![[Pasted image 20240617160331.png]]

Single Compare

Drive high, drive low, toggle
![[Pasted image 20240617154200.png]]

![[Pasted image 20240617154213.png]]
![[Pasted image 20240617154922.png]]

Dual Compare

Single pulse, continuous.
![[Pasted image 20240617154942.png]]
![[Pasted image 20240617154951.png]]

PWM

![[Pasted image 20240617155524.png]]

Merry-Go-Round-of-Life

Merry-Go-Round-of-Life

人生的旋转木马

开新篇啦,这篇写什么好呢。我想把我怕的写下来,把我喜欢的写下来,把不想忘掉的写下来,把想对未来的我说的话写下来。

2024/6/2

周末电草人好多,有好多家长带孩子来玩,车子把入口都塞满了。还有好多穿学士服拍照的同学。这时候到电草上躺一躺,倒也不会被自己的孤独和悲伤淹没,周围一片都是活泼热火的氛围啊。我也变得,害怕孤独起来了。

有人在玩穿越机,我到他旁边躺下,开始盯着傍晚那明亮却又不至于刺眼的蓝天发呆。没一会就有几位家长围到了那个飞手旁边,开始客套,问东问西。那人却不准备回答,带着图传眼镜自顾自飞着。几个家长便围着开始没话找话,还想让飞手做一些比较危险的操作,比如让穿越机从两个人中间穿过去。飞手居然还照做了,我实在无法理解。后来了解到他是电院的老师,然后几位家长开始问,你教不教小朋友飞无人机啊,他说教啊,看小朋友想学到什么程度。我想起了以前我拜托我妈带我去找航模老师拜师的时光,但当下我看到这些只感到烦躁。

2024/6/3

下午去上373的lab。不知道为什么,感觉和每次lab结束的时候心里都感觉非常充实和平静。我个人是非常享受和同学交流,帮忙的。大概这就是天生TA圣体吧,就是这个TA啥也不懂,只会瞎扯淡。
wzn发现了我lab manual里关于程序烧录有个小问题,然后尝试和我一起解决。最终我们整了一个脚本来一步解决了这个问题。
yjm说他最近在尝试飞穿越机,RM的队里面已经有6,7架穿越机了。我开玩笑说,该不会穿越机部门已经成为你们RM里最大的部门了吧。他翻购物车的时候我看到了一只紫老头周边。我问他,你是INTJ?他说是的。嘿嘿,神经脉络组赛高。确实在很多时候能感到我和yjm之间莫名的默契和理解,哪怕我们前三年都没怎么说过话。可能我们最多的交互就是,我去航模队的时候看到他坐在RM队里,然后我们相视一笑。我以前到底是有多自闭啊?!居然没早点和他搭话。
他说他对于飞固定翼很感兴趣。我跟他说了以前我学固定翼的心路历程。只能说,近半年写博客的习惯确实让我有了一些总结自己过去的能力。
但有的时候我能感觉到yjm心里的挣扎,但我说不清那是什么。可能是我从他身上,看到了我的影子吧,虽说这么说给人感觉太傲慢了。
但我真的很享受和他聊天,还记得之前和gxy,wrz吃完饭回去的时候,我跟yjm说,你要是需要找人聊天,希望你可以来找我。
傍晚找了lcx和ltx去东湖面馆吃饭。

诶呀,我真的要吐槽,之前那个滑翔机的加强杆什么时候能补货啊啊啊,我都两个月没飞了,手痒。。

晚上给家里人打电话又打了两个小时,主要是关于租房子的事情。我跟我妈说,我感觉她和我妹说话的时候,始终没有真正尊重我妹作为一个独立自主的人,总是用公式化的回应来敷衍,用家长的教条式的权威来压迫。这显然会让我妹反感。我告诉她说,我会好好和我妹说租房子不合适的地方的,并且我妹多半会接受的,她又不是不讲道理。然后我妹就真的接受了,虽然她心里还是感觉挺遗憾的,但我认为没留下什么伤痕。

2024/6/4

傍晚和lby去和zly和她npy去吉姆丽德吃晚饭。总之,就是感觉有一点微妙的。
饭上和lby开始讨论人格类型的话题,他说他在每次人格进阶时都会有清晰的感觉。我倒是没有这种感觉。在之前我也研究过我的INFJ四阶段,大概四个月前,我认为我现在处于的是INFJ第三阶段的Se翼。这个是从我个人心态和荣格量表得出的。但我并没有因为我在第三阶段而显得有多强大。大概是因为阶段也有强弱之分吧哈哈。联想到修仙小说的雷劫,劫数越大,历劫重生的境界越圆满,lby可能属于这种吧。
还说了其实我并不太喜欢我被分到INFJ这个人格类型。原因有以下几点:

  • 我不是非常喜欢他人用人格标签研究我。虽然我自己自得其乐。。。
  • 我现实中认识的很多INFJ都比较拧巴,我认为这并不是我想成为的样子。诚然,INFJ可能普遍会想得比较多,比较杂,喜欢正着想反着想,听起来像是天生的理中客。但这并不意味着我们应该行事犹豫,或者给人拧巴的感觉。用人格胚胎形容INFJ确实得当。人便是这样的胚胎动物,有学习性,并没有哪些特化的能力(思考算?有点抽象了,按脑容量定的话也不算很突出啊)。也因如此,INFJ很容易给人一种,思想上的巨人,行动上的矮子的感觉。我希望这一点可以有所改善。适当尝试微调自己的思考习惯来客串其他人格类型,真的很好玩。
  • 都说INFj的人格面具很重,我感觉到了,并且想尝试不带面具活每一天,说每一句话。但是真的有一种,面具底下空空如也的恐惧。

但既然已经是INFJ了,那便好好练这本功法吧。

还讨论了苦难的问题,在我的认知里,真正的苦难是思考的停滞,因为思考一旦停滞了,世界上的任何事情都会轻易转化为苦难降临到我身上。换句话说,我保持思考,自省,只是为了避免落入这种悲惨的境地。

2024/6/5

Removed

2024/6/6

昨天高中同学lax说本周末有空可以一起吃饭(之前有说过),她说她会叫上她朋友,于是我也开启了重新捡回自己洒落的羁绊的旅途。先是问了lbl,他很爽快的就说绝对会来,然后他还联系了他的室友们,也都算是我的二号室友(常年串寝人是这样的(还是会对于自己的真正室友心怀歉意的))。lax还帮我叫了fjw,fjw拉来了yzy(我室友)。最终确定来的人有八位。我们很多人都很希望ypc能来,他说他就和我比较熟,不想来,而且怕狗粮。我说那我周天和你真人线下1v1,他发来他家地址。之后他喊我上号,他和几位东校的同学有个小的开黑圈,zty,qzc,zyc,lcj都在,他说我可以上去一起和他们玩星露谷物语,很开心很开心,但自然是会有些不自然的,不过我觉得完全处于能接受的范畴,重新融入,总归是会越来越熟的。我真的希望能够和四班各个分散的小集体重建联系,把大家重新拉回到一起,虽然知道很难实现,但是抱有这个美好的愿景,我还是开始行动了。
归根结底,我还是对于我曾经当过班长的这个集体心存着很深的感情,深到,我认为断联一年就已经无颜再见。但大家真的都很宽容,也都怀着重新见一见彼此的期待,我真的感到很开心。心中有愧,想好好弥补。
和qzc还交流了一下,跟他说了说我对于很久不和同学联系的惶恐,以及为什么会有周六的局的情感因素。他说周六确实是有事情来不了,之后完全可以我们自己再找时间小聚。

之前lby问我,一个人日记可以带来什么?
经历每一天的过程中,他会逐渐习惯于从未来的视角审视今天我做的决定。他会希望每一个日子都值得被书写,因而我会有意识地想去抓住每一个值得未来的他回味的选择。他不会回味他的逃避,他的怯懦。他会回味他的赤诚,他的勇气,会感动于他曾经立下的誓言,生发的感悟,这些于他而言都是真物。真的成份多了,他应该就能真的认识自己了,认识更美好的自己。
于此之上,日记公开与否没这么重要,因为无论如何,最大的读者和评委永远是未来的自己,我其实也是很高兴和我没打过多少交道的人可以通过这种方式知道世界上存在着这样一个人。

lby说他男性朋友不多,很多都是异性朋友,主要是因为他其实不是很能融入男生之间那种称兄道弟,打游戏的氛围,他更感性,喜欢情感类话题。我感觉我能成为他的朋友,他也说和我说话不感觉累。

路上随便遇到一位大一大二期间认识的老同学,见面第一句永远是,你怎么瘦了这么多。

2024/6/7

lax定了人民广场的酒楼,so可靠。

周六当天先是和yzy在酒楼门口碰头了,感觉虽然他说话还是之前的语调,但是整体变得有磁性了很多,能想象出他在讲台上讲课的样子。之后lbl到了,他整体宽了一圈,然后开起了经的体重转移玩笑。在之后hly来了,超成熟的装束(本来这顿饭没领导的,现在有了)。
感觉大家都没怎么吃饭,说了好久的话。
yzy说我们寝室真的很抽象,高考的分差有120分。我听到真的很难受,完全不知道应该怎么接。也确实是我一个比较难受的点。我高中经常串寝到隔壁(lbl,hly),一起学习,主要原因是我室友都睡得很早(安分的意思),我就比较卷,lbl也是数学大佬,有啥问题可以直接问。也确实是我比较功利吧,确实没有和我室友共享足够的交流空间,大二下开始我就走读了。一直以来心里都对此比较难受。我们说之后寝室再聚个餐(今天另外俩室友得加班)。
lbl和我坐一起所以和我说了超多话,高三到现在的事情。感觉很多事情都是可以和大家都讲讲的啦,不一定只跟我说。大家都一起吃饭我还是希望有好玩的事情大家一起谈咩。感觉lbl比之前收敛了很多,大大刺刺的外向性格(本来我也不觉得这是他的底色)基本没有了,但感觉很多还是没有变。我本来想问问他家里目前状况的,但最终还是没问。我可能也感觉到了吧,当所谓的圣母无法真的拯救任何人,每个人都会迎来他自己的改头换面的时刻吧。无论是话疗还是共情,只能帮助度过当下的难关,虽然这样已经了不起了。

再之后在南京路上逛了逛二次元,买了《跃动青春》的baji和凉宫春日的轻小说。不一会就到晚饭时间了,经hly推荐我们选择了居酒屋。鳗鱼烧很好吃!但lbl倒是一直没说话,他估计是处于玩累了,说累了的状况了吧,我也有点。回家的路上,好累好累。

2024/6/8

和老爸沿着南六公路一小时一路开到了ypc家。本来老爸是不跟着的,但他说想去滴水湖玩玩(诶,还是怕我第一次开这条路,别给他把驾照分扣完了),我就给他捎上了。我想起来hly昨天说,日本歌手里面他很喜欢谷村新司,我让老爸放放谷村新司的歌。他有些惊讶,放出来我才发现这个歌手老爸也一直听,就是车里家里一直会放的曲子。我跟老爸说,我还喜欢听中岛美雪,他说那是他高中的时候了。。他给我推荐恰克与飞鸟。

给ypc带了两个西瓜。我之前是抱有着,我要给他做心理咨询的想法来的,但还是想到,我和他还是平等的同学,不应该在这种地方刻意维持那种兼容,相对高大的形象。就随聊聊吧。没聊多久就看到他眼皮在抽,别是要掉眼泪了。他对感情,对事业的心有些死掉了,我真的不想看着这颗心坠地。也或许已经坠过地了,他已经擦过了,然而我不在。他也问了问我的情况,他表示,你这人看感情的方式还真是抽象啊哈哈哈哈。他说他高中第一次谈做的抽象事情可真不少,我细细思索,确实是不少的。

聊了我一以贯之的恐女情节。

我跟他说,其实我很多时候感觉和长辈交流更能获得内心的平静,更能表达我自己,所以更喜欢和长者说心里话。他说这样可不一定好哦,不好的。我问他为什么,他说,直觉。我说那你的Ni想必挺高的,他说Ni是啥,于是给他测了八维和面包体,他让我猜结果,我一个个猜了过去,I,N,T,P,全中!有意思。太空垃圾组get。

他把拿来的西瓜切了一个,和我一起吃,吃完我就告别了,再不回去没晚饭吃。已经坐车上了,他发我消息说刚刚他伸出窗了和我说拜拜我没听到,头也不回就走了。啊,从什么时候我变成走的时候头也不回的人了,什么时候我开始认为别人不会向我回头了。我给他发语音说拜拜,他说撒油娜拉~

今天获得了一种新的享受,就是说大白话,大实话,心里话。每当我觉得不对劲,或者氛围让我难受的时候,搬出这个方法,准没错的。

回去的路上,弯弯的公路,西斜的残阳,啊,该来点公路片bgm了。

到家后抽象的事情发生了,我发现我的包忘在ypc家了,毕竟我的包确实全无存在感,进门墙角一丢就再也没碰过了。。甚至包里带的礼物,也没给。。是风景水彩。跟ypc说了下礼物是包里东校十周年纪念文件夹和里面的画,然后其余东西的我叫了同城速运给运回来。

晚上去小姨妈家拜访,吃了好多哈密瓜和大福。我和她开启了1对1的即兴辩论。话题包括但不限于,一夫一妻vs一夫多妻,真爱应该or不应该结婚,我还爱不爱前任…小姨妈真的是想法很不拘一格的人,超级超级开心可以和她讨论这么多。我问她感觉我和从前比有什么变化,她说骨子里还是老样子,做自己,就是话变多了,会表达了。我想,这才是亲戚之间该有的思想交流,我之前漠视了这一点。

最开心的其实是听到我小姨妈直视着我的眼睛和我妈的眼睛说“你爸妈确实是真心相爱的”。

哪怕当时语境下其实她是想论证真爱不应该结婚…

2024/6/12

牛瑞琪特有的神奇presentation交接方式:“Can you explain that?”,歪下头把话筒递给队友,我真的要被笑死。说话很严肃的一个人,偏偏会做很反严肃的事情。

和ypc,zyc玩桌游模拟器,跑团,脑子死得很安详。

和很多很多很多人合拍了毕业照片,虽然我这个人疏离得不行,但确实在这个地方留下了很多羁绊啊。hyw的外公也来帮忙拍照,专业人士👍,和他交流很开心啊。pj来问我我现在还玩besiege吗,还在写mod吗,我没想到他会这么记得这些,跟他打趣说,写mod后就没怎么玩了,是不是侧面说明我的mod不好玩,我自己都不想玩啊哈哈。
我走的时候看到clt坐在大厅的台阶上,若有所思的感觉,我本来都已经走远了,但还是返回来说,啊,我差点忘记了,我还没有和你合照!他直接露出超级灿烂的笑容,啊,我被彻底治愈。

晚上xhm问我为什么没请前任来拍毕业照,我说这不对。我问他是不是认为我完全没有放下对方,他说无论是于情,还是于理,我都不可能放下对方,我没接话。
我每在生活中体验到一点货真价实的快乐,我就会走出来一些,但我其实不是很想为那些质朴的快乐蒙上一层忧郁的色彩啦。

2024/6/13

得知对方也有喜欢的人了,我也该做一个合格的前任该干的事情了。从此不会回头啦。

晚上和导师开完会,路过lbl四楼露台的时候看到有自助餐!袜裤袜裤!羊角三明治,热狗,沙拉,芝士蛋糕,巧克力蛋糕,泡芙,土豆泥,啊啊啊,我被诱捕了。和小朋友拼了一张桌子吃晚饭。

嘛,本来想画一幅芙莉莲的水彩的,但苦于找不到中意的作品临摹而暂且作罢。不会原创就是会陷入这样的困境。

看《跃动青春》

习惯假装不在乎的人,往往是对别人宽容的人
习惯只看自己缺点的人,往往是善于发现别人优点的人
想要去展示自己普通的人,往往是愿意接纳别人对人
那些恐惧社交的人,往往是最能聆听别人的人
没有人是在改变之后才配用有回忆的吧。
我们身边也会有那些曾经对我们说过谢谢的人,对我们笑过的人,对我们好过的人,和我们一起行过一段路的人。正是这些已经向我们证明了,纵使是我们不喜欢的那个自己,也曾经给我们留下过礼物了。

2024/6/14

再再再强调,看我的博客根本不需要我本人同意,你翻开这个网站有那么几种可能,我邀请你/你翻我github看到/你好奇世界上有没有和你重名的人/听说我有这个网址且想通过这种方式了解我/关心我近期状态。无论是这里的其中之一还是其他的很多原因,我都欢迎且感激。我妈之前问我,我博客上记这么多本真的东西,任何人都可以看,我就不怕以后别人通过研究我写的这些内容来攻击我吗?我的回答是,愿挨,如果真的能做到这地步。

下定决心近期都不自己喝闷🍺了,不想让任何人在这方面担心,如果真要喝的话,就等到今年10/20,去思源湖边来一杯吧。

早上起来搜恰克与飞鸟,搜到了宫崎骏做的短片mv,转发给老爸。他居然只回复我说:“谢谢,收到”!?算了,是他的风格。循环了好久On Your Mark。

开始学日语(因为八月份要去日本玩),从50音开始。b站有很好的免费课程,能感受到博主的爱,谢谢他倾泻的爱,世界真的变得更好了。

今天和ltx聊了好久。
我们初识于archlinux,在这块他走的比我远,也比我更乐意折腾,真的会心生佩服。很多时候在看他折腾这些的时候,我感觉也像是在照镜子,会意识到我曾经的局限。他曾经也尝试过做mod,是可爱的人(我天然地会认为所有能够燃起这个念头并且付诸实践的人肯定都是可爱的人,因为我遇到的,都是很可爱的人)。

lab结束后和留学生joven说起他朋友的事情,感叹j人和p人对于时间概念的感知真的很不一样。ltx说那个“下限”(神秘的说法)的人格好像很有意思,我说,你说的是inf*人格吧,他说是啊是啊。于是给他测了测八维,跟他说我是infj,他说啊,就是这个。

聊了今天晚上lab上为什么我有点无精打采,是因为傍晚没有去补觉,为什么没有补觉,因为知道会睡不着,为什么会睡不着,因为感情问题。说的时候在强撑不让眼泪掉下来,确实撑住了。

谈到了大学四年的人际交往问题,我可是很大的问题儿童,他倒说感觉我认识的人很多,朋友也很多。我猜测他是通过我和他的交谈推测出来,但其实我在这方面还处于起步阶段,我目前总结的交往准则不过就是,自信,大方,面带微笑地把真心呈现给值得的人,如此我便会感觉真正的我活在很多人的心里了。我跟他说,我从小到大的交际都逐渐变得越来越淡漠,我不喜欢这样,我想在这段旧旅未尽,前途未开的日子里,多认识一些本就想认识的人。我说我虽然认识很多人,和他们也会默契互相投以笑颜,但却很少会有所谓的best friend,他说,人一生能有多少best friend呢,能有一位就已经很幸运了。是啊,我在这方面有点病态的完美主义倾向啦。lcx,ltx都是我的好朋友,我对我此前的疏离感到有点抱歉,我相信假以时日,我们一定会变成best friend的,至少我会这么努力。

和他交流了兴趣爱好,他说感觉我生活好丰富。我跟他说其实有挺多部分都是分手后才捡起来的,每因此获得一点质朴的快乐,我就能走出来一点,他沉默了,确实说的有点沉重了啊。

谈到了番,他问我包上的baji是拿个番的,我说是《跃动青春》的女二。他说这个番有点太阳光了,感觉不适合他。我问他会怎么评价刘备。他说没啥头绪,也不理解我为什么会突然这么问。我说有些人对刘备的评价是,他的心一直是一颗光洁无缝的球,哪怕世事变迁,背叛谋害,都未曾伤其一毫。我说这部番里面的女主能给我这种感觉,我希望成为这样的人。不过女二和我的现状最为贴近啦。未来很美好,值得我一直带着无暇的球去迎接。

现在已经交到多少朋友了(判断标准是他们是否有好好接住我的心,或者真心互相欣赏某些方面)?
wyf,lcx,yjm,ltx,wyc,ypc,lbl,yzy,fjw,wzn,xhm,hyw,xzk,lby,clt,ls,lax,wjj。
也有很多人可以相必是可以成为好朋友的,只是缺少一些交流的契机,qzc,zyc,hly,pj,wrz,lxg,cte,yc…

2024/6/16

和cte去家旁边的百联吃饭。初中四年的老同学,已经七年没见了。
那会他是我们班的班长,小小的个子,但感觉很大很大的能量。
他之后就在张江的生物制药公司搞自动化了,好理想的就职地段。
和他就很少谈之前初中的事情了,可能是记忆真的很久远了吧,反正我是没记得多少了。我问他,你还记得wsy吗?他说没印象了,这谁啊?我说,坐我右手边,one of your doughter…他说,啊啊,好像知道是谁了,但还是没什么印象,我也释然。
谈起了感情问题,我说我喜欢(非单指异性)一个人的方式是成为他,将我喜欢的那些点内化为我自己的点。每当我选择在某个情境下,像某个人一样思考,决断,我就会感觉我确实在实践爱(广义)。此时对方是否真的还在身边并不重要。我身上有着很多很多这样的影子。我跟他说,我越来越觉得,我并不是用理性逻辑思考的人,而是用情感思考的人。哪怕有时候我会展现出逻辑和理性的一面,那也是因为我选择在此时扮演那个理性的人。他可能想问,那什么时候才是真正的你呢?我的回答是任何时候,选择扮演谁,选择哪些特质内化已经体现了我的自由意志了。
我问他说,啊,再不办同学聚会就很难有机会了,他说不是很喜欢一帮本来就不太熟的人聚在一起,更希望可以小圈子一起聚一聚。
人生如戏,我这是在演给谁看呢,我想,绝对是演给自己吧,演给每天回顾这一天的我自己,我可以由衷地跟自己说一句,今天没有虚度。
但是还是没有去要wsy的联系方式,毕竟他连记都不记得这个人了。但我还是希望能够真的给所有该过去的事情画上句号。

2024/6/17

YANNIS亲临RC,好好好,得用英文讲了,希望别死在台上。
虽说是第一次开RC,倒是意外的挺顺利。但是30min就把东西讲完了,感觉有挺多可以再展开讲的地方没展开来。
于我而言,听自己的录制回放还是需要些许勇气的,听了一遍,感觉还听得过去,基本还算清晰,语速也适中吧,但愿。

2024/6/18

七点钟的时候在梦里难过得醒了过来,但忘记具体什么梦了,呃,感觉好糟糕。
但就是突然理解了为什么会有人喜欢过山车和蹦极,至于为啥就不好再深入谈了。

想要努力活下去。

大概这些emo是因为昨晚写16号博客时生发的。我在思考,如果我是乐衷于模仿扮演的人,那他人喜欢的我,是否是我之前喜欢的人在我身上的投射呢。
我就是突然就想起了《致不灭的你》,小不就是这样的吧。这一生真的会带着很多很多人前行,并且还会再遇到很多很多人。

好,我发现我现在对抗emo的方式就是追根揭底地问自己到底是对什么感到难受,然后狠狠地想,想通了之后就不会因为类似的事情再emo了,但没想通就容易钻牛角尖,这时候看看书就好啦,会平静的。

我是真好奇了,到底是什么梦可以让我从起床难受到上床。只记得有个人回望了我一眼后走了,然后我就醒了。
评价是闲的,明明有一堆事情得做。有的时候就会很没出息地想要做回以前那个“无忧无虑能够一心扑在某件事情上的男孩”。

找到了喜欢的芙莉莲插图,官微,暂时的神。

看到xhm他们测了面包体新题(16type.com),我也测了一下,题很不一样,但还是想吐槽这个选项设置,就不能两个都要吗。做出来INFJ-A-H。曾经做出来过enfj,estp,最终还是回到了最初的样子。

晚上和xhm谈起了梦的事情,每个人做的梦都很不一样,我的梦里经常会出现具象化的人,我和他们就面对面站着对话,或者一起去做某件事情(好多好多拯救世界剧本)。常说梦是用来治愈现实生活中自己因匮乏且产生的渴望,我心底里还是非常想和很多故人多说说话的吧。
本来想多写些xhm说的内容的,但想想感觉还是不大合适。
有一点共鸣:在谈过恋爱之后才真正拥抱友情。

2024/6/19

梦到了高中同学,是治愈的梦。
但整个人情绪还是非常低落。
但一整天这样提不起干劲肯定不不行哒,跟别提一连几天这样。在这种时候或许花一段时间,一刻钟,把心里的歉意,懊悔,懦弱,哭出来,终有一天我会哭不出来的。那时候情绪也会回归真正的稳定吧。
说起来我现在可能都不算一个合格的旅伴了,说不定哪一天玩着玩着就突然情绪炸裂,没有缘由的那种。

也可能是最近我给我自己的独处/自嗨时间太少了。

算得上是破碎时刻(《少有人走的路3》P65)吧。

2024/6/20

下午准备和wyf去看财大的外滩亮灯,在那之前先去参加了鲁迅公园的星铁的流萤邀约活动,我没预约就没进去。他拿了一个纪念彩窗,虽然免费的纪念品可能不值来回的地铁票,但公园里面布置的环境真的挺好的,还有《是一颗心免于悲伤》的背景音乐。就是黄梅天好闷啊啊啊啊。

他进活动现场玩的时候我就坐在外面的长椅上,感觉就在这个瞬间,我重新学会了独处。湿热的空气,似有似无的微风,拎着蒲扇的老大爷们,林木后方矗立的高楼以及音乐,无不让我感到平静。

到了外滩,听着他的同学喊“财大牛逼”莫名会有些出戏。

早些时候ysn在寝室群里问有没有对jazz感兴趣的,可以明天去北外滩那里看,有预定的票票。问了wyf有没有兴趣去听jazz,他说听不懂,我要听就我自己去吧,当时我暂且作罢。之后从外滩下来,又问了问他,说我也不懂jazz,只是比较好奇,反正无知不妨碍我好奇对吧。他决定还是去一起听。很多时候,好好听懂对方的心境,在此之上再嫁接以自己的想法,再明明白白表达出来,就很能够说动他人(如果确实不合适的话,在这个过程中自己也能意识到)。诶,其实我也没抱有太强烈的希望他一起去的念头,只是觉得,他能借这个机会多了解还是很好的。到地了,他来了杯红干,我来了杯无酒精鸡尾酒(?),毕竟之前立过近4个月不喝酒的誓言,在这方面我还是很自我且固执的。

架子鼓基本主导了这场jazz,没有萨克斯有点可惜。

回去的路上和司机师傅聊天(因为是川沙的老乡),他问我,jazz听得懂吗。我说听不懂,但是过去这几天我的心情很差,情绪也很低落,但是听完之后我感觉重新燃起了一部分对生活的热情。这也正是我对于音乐,艺术所抱有的最初也是最终的期待。

最后,感激杨总quq。

2024/6/21

在家躺平。
重温了《夏日幻魂》,看到最后主角的画,就想到,是不是可以给那个人画一幅正面半身,之前只画过超小幅的背身。
夏日幻魂-半身

我知道这个做法不好,但是这个念头就是挥之不去。
真要找个理由的话就是,我们这些非专业画佬,肯定是挑选那些能够引起自己情感共鸣的题材画。像这种题材呢,就能够引起很强烈的情感体验。也希望能以此转移自己爱的客体,仿佛画下来情绪就会变得恒久而稳定。
确实是很擅长找理由的孩子,也确实是个挺无可救药的傻子。

低能量的时候就是需要通过爱上些什么来维持生活的热度,实验室打工也好,画画也好,看书也好,和同学出去玩也好,让我认为生活依然值得,依然有很多未发现的美,未尽的情,这很重要。

2024/6/22

接着和家里人讨论假期补课的事宜,感觉家人之间,在用逻辑分出好坏对错前需要先共情和理解,逻辑用在自己身上是利器,用在他人身上便很容易变成凶器。我又不是anti-social人格障碍,该有的共情能力我都有,也不需要通过逻辑推理来模拟这个功能,自然没必要对于他人事事讲逻辑自顾自追根究底,这是我所讨厌的。

虽然这么做对于我自己而言自然是不会有什么显式的坏处,毕竟崩溃和拒绝沟通的是他人。这位辩手,你满意了吗?

2024/6/23

在情绪低落的时候翻自己的博客真的是能治愈自己的。

2024/6/24

中午去lbl的时候遇到了zrx,都来lbl打工啦哈哈,听他说现在在万文杰实验室。是一位想了解的人,但心里还是会有怪怪的感觉。跟他说完我在一楼便告别了。我这会应该是在和我的直觉功能作对吧。

跟yjm说周五他替我带了lab,今天他就别来了,毕竟他事情是真的多。但是mac openocd的问题直到最后都没有解决。一个人还是很难忙得过来的,呃呃,各种千奇百怪的问题。yjm,应该有好好趁这段时间休息吧喂。

傍晚和lcx,ltx去吃了机械学院的甜魔咖啡,之前约定过下雨天就带我来这里吃233。
买了盒曲奇挞,回lbl的路上正碰着师姐和她npy,正好曲奇两个口味都剩一点,就让他们俩各挑了一个。都选了巧克力味的!同好+2 =v=。(不是,这个句号在=旁边怎么像是一滴泪珠=v=💦)他们俩笑得好开心,被治愈了。

越发感觉到,哪怕同为infj,差别也是很大的。我觉得很多时候我做出一个选择之所以果断,是因为我真的认为大部分大部分的选择都不会必然地导向好或坏的结果。比起纠结,我更好奇我的选择会导向何方。并且大部分时候,哪怕事情的导向不对劲,我也有自信做出弥补(听起来有点P,就是很奇怪,我的F/T,J/P每次都非常均衡,但就是每次都是FJ)。INFJ找人聊天的话,对方确实需要Ni和Fe至少沾一个哈哈。

第一次知道源神也是INFJ。想想现在认识几个INFJ了,lby,zrx,zlj,zjy,wrz,yzy,浓度好高!虽然我本人并不典型。

是睡得越来越晚了(我也没喝咖啡啊)。还是好好考虑一下安眠药的事情吧。

2024/6/25

不管对于男人还是女人,判定其心里是否健康,都不在于我们有多少次避免危机的办法,而在于我们是否能早一些面对危机,并且向下一个危机挺进。

一大早室友发来消息问我gxy真有新npy啦?我说不知诶,然后他发来微博截图。啊啊,是说和npy出去旅游。我说那应该就是吧,可以找wrz,确认一下。然后就确认了。

她嘴里的我让我感到陌生,我意识到再怎么说,她曾经了解的我已经是若干个月以前的我了。时间就是这么抚平伤痕帮助人走出来的吗?不过有句话还是很有价值的,“从刚在一起到现在你就没有变过呢,不敢直面自己的阴暗,找一万个理由让自己成为最可怜的人”。

Mod 猫meme CUT1 Script

脚本

感觉比起来边剪边想词,先把脚本写下来会更有效率
- 和围攻群友快乐空战
- 呀,鼠了
- 问答:
- 问:那个围攻不是个中世纪游戏吗
- 答:对
- 问:那为什么可以玩空战
- 答:沙盒玩家 和一些中世纪魔法
- 但中世纪终归是有极限的
- 好想体验原汁原味的现代空战啊
- 浏览创意工坊。。。
- 希望可以找到大佬做的空战mod
- 。。。
- 虽然有导弹mod
- 但是没有雷达和航电
- 总感觉缺了点什么
- 既然如此
- 只能我自己写啦
- 精通c/cpp的复制粘贴-熟读数据结构和算法-dcs Su25T 百小时飞行员
- 先从读开发组的开发手册开始吧
- 噼里啪啦
- (打开手册,开始翻阅->😵)
- 这都是些啥
- 决定还是询问下群里大佬

Copy-Paste in Hyprland across Wayland & XWayland

After a certain upgrade of hyprland, I can no longer copy&paste across Wayland & XWayland apps, which is very annoying.
The relatied issue: https://github.com/hyprwm/Hyprland/issues/6132
Maybe fixed in: https://github.com/hyprwm/Hyprland/pull/6086

According to 6132 issue, some provide a walk around. I tailored it to adapt it to my system.

Create a shell in ~ directory, named clipsync.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#!/usr/bin/env sh
# Two-way clipboard syncronization between Wayland and X11.
# Requires: wl-clipboard, xclip, clipnotify.
#
# Usage:
# clipsync.sh watch - run in background.
# clipsync.sh kill - kill all background processes.
# echo -n any | clipsync.sh insert - insert clipboard content fron stdin.
#
# Workaround for issue:
# "Clipboard synchronization between wayland and xwayland clients broken"
# https://github.com/hyprwm/Hyprland/issues/6132

# Updates clipboard content of both Wayland and X11 if current clipboard content differs.
# Usage: echo -e "1\n2" | clipsync insert
insert() {
# Read all the piped input into variable.
value=$(cat)
wValue="$(wl-paste)"
xValue="$(xclip -o -selection clipboard)"

notify() {
notify-send -u low -c clipboard "$1" "$value"
}

if [ "$value" != "$wValue" ]; then
notify "Wayland"
echo -n "$value" | wl-copy
fi

if [ "$value" != "$xValue" ]; then
notify "X11"
echo -n "$value" | xclip -selection clipboard
fi
}

watch() {
# Wayland -> X11
wl-paste --type text --watch "/home/cyl/clipsync.sh" insert &

# X11 -> Wayland
while clipnotify; do
xclip -o -selection clipboard | ~/clipsync.sh insert
done &
}

kill() {
pkill wl-paste
pkill clipnotify
pkill xclip
pkill clipsync
}

"$@"

alias in ~/.zshrc:

1
alias clipsync="~/clipsync.sh"

enable it by running

1
clipsync watch

kill all by running

1
clipsync kill

Self-start, configured in ~/.config/hyprland/hyprland.conf

1
exec-once = clipsync watch

REMEMBER TO REMOVE ALL THESE STUFF WHEN HYPRLAND HAS FIXED THE ISSUE

Solved in ISSUE 6086

JustWork 参考文档
《窄门》读书会p7

《窄门》读书会p7

开篇第一段文字

我在这里讲的故事,换做别人可能可以写成一本书。然而,我在这“故事”里不遗余力地活过。倾尽了所有德行,所有仅仅将回忆记录下来。往事断断续续,支离破碎,但我不打算靠虚构事实连通补缀,这种修辞铺陈,会浇灭讲述的热忱,最后一丝意趣也化为乌有。

是的,在日记里撒谎的话,会被记忆之神背弃的吧,我始终抱有这种朴素的认知。

每个人心里应该都存在着一扇窄门吧,我的窄门是什么呢

很多时候能够共鸣阿丽莎。她在幼时看见了母亲偷情,看见了欲望的恶,成长时心里的无助彷徨因为没办法舒缓,选择了宗教,最后又因为宗教倡导的无私奉献,让自己具有了神性,无法产生对俗世欲望的追求,想爱又不能爱。
我虽然家庭美满,但并不意味着我未曾受过类似创伤,在高中,我努力表现的像正常人,却常会受到创伤折磨。我恨人与人之间世俗意义的比较,因为我曾经认为我在这方面已经一败涂地。这道宽路于我而言已经被玷污了。于是我只能去追寻窄路。我追寻的窄路与阿丽莎却不相同。高中那会我非常喜欢听轻音乐。可以说,我完全可以接受没有手机没有电脑没有游戏,但我无法接受没有轻音乐的生活。有那么几首流行改编的钢琴曲(我当时不知道还有原曲,我还以为钢琴版本就是原曲呢quq),分别是,《Heal the world》, 《We are the world》和《You are not alone》,我印象非常深刻(哪怕当时我根本不去记歌名,轻音乐是这样的)。每当循环到这几首,我都会不厌其烦地享受心底的宁静。哪怕已经听过100遍,500遍,我依然会感觉我心如赤子,往事都离我远去了。有一天,我用家里电脑上的网易云搜这几首歌,想找找有没有这几首歌的hires(发烧友是这样的)版本。我爸当时看我在搜这个,惊讶地问我,你居然会听这个?我当时感到很奇怪,因为我爸几乎从来不会主动和我交流音乐。我当时感觉到他的目光中存在着一种不可言说的神圣。他之后把他仅有的CD随声听给我了,还有Michael的《Dangerous》CD专辑。我和我爸居然在这个地方,获得了跨越时空的共鸣,这是我目前人生中,对于“不约而同”的最佳注解。
我想找的那三首曲子,无一例外,都改编于MJ的流行乐。我当时真的非常非常感动。从此,我便很少听轻音乐了,我开始听MJ。我听到了他对于爱与欲的挣扎,我听到了他对于权贵的抗争,我听到了他对于世人的大爱。那时候的我决心,要做一个像他一样,大爱世人,为人间带来爱的使者。我努力对身边所有人都温柔。我会和尖子生一起讨论数学题,也会和学业不理想的同学谈心,谈论过去,谈论未来。我对大部分人都充满着好奇,我认为他们真的都很可爱啊,但是他们中的很多人都遭受了好多生活中的,学业上的苦痛,我实在是不忍心让他们在我这里再感受到一丁点恶意了。我认为就这么活在世上,世上便多了一点光,就算得上不枉此生了。这是我自己信仰的雏形,几首歌,一位已经过世的歌手,当然还有我一直藏在心里对善的渴望,塑造了这些。

逃离窄门

我逐渐感觉到,我虽然在与我心里的神圣靠近,但我却在渐渐远离实在的人。我清楚地感受到,我与我同学之间的友谊似乎与其他同学之间的友谊不一样,没有人和我称兄道弟,没有人会和我开俗俗的笑话,他们不会对着我大笑,也不会大哭。我感觉到痛苦,因为这不是我想要的。我渴望能给其他人传递温情,但是我们的距离变得太远了。我想起了伊卡洛斯的故事,不要飞得太低,海水会沾湿你的翅膀,也不要飞得太高,阳光会融化你的翅膀。我感觉我确实离太阳太近了。
但没有给我时间去探索信仰的平衡之道,时间来到高三,我来到了上中,陌生且高压的环境,让我缩进了龟壳,我对于MJ更沉迷了。带有这种态度的我,也是没有交到朋友。我感觉正是这段时间,我开始主观地去疏远实在的人了。可能是因为同龄人真的都很厉害,我“神爱世人”的游戏到此为止了(可能是我今天写下这些,这个游戏才算是真的画上了句号)。
上大学后我开始思考别的事情,比如,到底是什么导致了文明的兴荣,导致了无止尽的战争。没有一个人希望文明衰弱,希望战争,死亡的发生,每个人不过是各司其职,做好了各自位子上该做的事情,但事情就是发生了,难以避免。我也没有太深入思考这些问题,因为我感觉我会想极端。于是我想给自己设一套道德行为准则,如果世界上所有人都能向这套准则靠拢,那么阶层就不会分化,矛盾也不会累计为战争。具体这个准则是什么,我已经记不大明确了。说实话我上面说的这些只是我从回望的视角总结出来的一些事情,可以解释很多时候我为什么会这么做,为什么会这么想,为什么我会对于某些事情生理性反感。当时的我可能只是循着模糊的感召行事。毕竟我之前也从不记录下些什么东西,还是很难考究的。
总之,我意识到我其实已经在窄门这条路上走了很久了,我已经太久没爱具体的人了。诶,爱过一位,但是我认为爱的也不甚具体,可以说正是有这份感情,才让我在读完《窄门》后有如此多纷乱的思绪吧。

《非暴力沟通》读书会p6

《非暴力沟通》读书会p6

一段比较有感触的片段:

(先生的表达:“和你讲话有什么用?你从来都不听!)
太太:你是在生我的气吗?
马歇尔:你这么说,暗含着是你的行为导致了他的感受。我建议你说:“你不高兴,是因为你需要⋯⋯?”这有助于你将注意力放在对方身上,了解他此刻的内心,而避免认为对方会怪罪自己。
太太:那我要怎么说呢?“你不高兴,因为你需要⋯⋯?需要什么呢?”
马歇尔:从你先生的话中去寻找线索——“和你讲话有什么用?你从来都不听”。当他那样说的时候,是因为有什么需要没有得到满足?
太太:(尝试着透过丈夫的表达,同理他的需要)你感到不高兴,是因为你觉得我不理解你吗?
马歇尔:你现在关注的是他的想法而非他的需要。我认为,如果我们选择关注对方的需要,而不是他们对我们的看法,就比较不会认为他们在攻击。不把注意力放在“他不高兴是因为你没听”,而是专注在他想满足的需要上,用“你感到不高兴,是因为你需要⋯⋯”
太太:(再次尝试)你感到不高兴,是因为你需要被听见吗?
马歇尔:这正是我的意思。用这样的方式聆听他,对你来说有什么不同吗?
太太:确实太不同了。我听到的是他的心声,而不是我的过错。

让我想起之前和gxy相处的时候。说实话我确实也很自我,总是认为自己应该对对方的情绪负责,一直都会认为,对方不开心的源头一定是出在我身上,如果我道歉了或者改变了一切都会好起来,但事实并非如此。首先,对方的情绪出现波动,可能是需求没有被满足造成的,而造成这种匮乏的,很多时候并不是我自己,而是很多客观因素,哪怕确确实实因为是我的原因,我身上也有很多客观无法改变的部分。再者,如果每次对方表达不满,我都陷入自我怀疑和否定,无形中也增加了对方表达不满时的心理压力,长此以往可能会导致对方压抑自己的情绪,而不是妥善表达。

STM32 Development on Linux

System used: Archlinux

Pre-requirements

  • c language server (for completion, diagnostics), e.g. clangd
  • A code editor that use language server, e.g. vscode, vim/neovim

STM32CubeMX

STM32CubeMX is mainly responsible for generating the project with your configuration.

For Distro like Ubuntu/Debain, you can go to the ST official site
Or you can install the software through distro repository

1
yay -S stm32cubemx

For Arch, you need to modify the AUR repository (I mean, maybe the maintainer doesn’t do a good job).
The URL for the repository:https://aur.archlinux.org/packages/stm32cubemx

First clone the repository

1
git clone https://aur.archlinux.org/stm32cubemx.git

Modify the required jdk version in file stm32cubemx.sh
from exec archlinux-java-run --min 17 -- -jar /opt/stm32cubemx/STM32CubeMX "$@" to exec archlinux-java-run --min 17 --max 20 -- -jar /opt/stm32cubemx/STM32CubeMX "$@"

Then build and install the STM32CubeMX

1
makepkg --noconfirm --skipinteg -si

Since STM32CubeMX is not compatible with jdk22 (which is the default jdk that arch is currently using), you need to install jdk17 through yay -S jdk17-openjdk

Then you can start STM32CubeMX by running stm32cubemx, and hopefully, everything is fine.

Compiler

Use arm-none-eabi-gcc

1
2
yay -S arm-none-eabi-gcc
yay -S arm-none-eabi-newlib

Debugger

Use OpenOCD to burn and debug STM32 through STLink v2 (the blue USB device provided by us).

1
yay -S openocd

Setup Your STM32 Project

Open your STM32CubeMX, follow the instruction of Lab1.pdf to configure your project.

NOTE: In Project Manage -> Project -> Project Settings -> Toolchain / IDE, use Makefile/CMake.

Generate the code and go to the project directory (with Makefile/CMakeLists.txt in the directory).

Then you need to generate the compile_commands.json for clangd to recognize the project.

Makefile

1
bear -- make

CMake

1
cmake -S ./ -B ./build

Build Project

Makefile

1
make

Then target binary file is ./build/<Project Name>.bin

CMake

1
cmake --build ./build

Then target binary file is ./build/<Project Name>.elf

Load to STM32F103C8T6

Use OpenOCD to load the binary file to the board.

1
sudo openocd -f /usr/share/openocd/scripts/interface/stlink.cfg -f /usr/share/openocd/scripts/target/stm32f1x.cfg -c "program ./build/<Project Name>.bin reset exit 0x8000000"

Result

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Open On-Chip Debugger 0.12.0
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
Info : auto-selecting first available session transport "hla_swd". To override use 'transport select <transport>'.
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
Info : clock speed 1000 kHz
Info : STLINK V2J37S7 (API v2) VID:PID 0483:3748
Info : Target voltage: 3.222587
Info : [stm32f1x.cpu] Cortex-M3 r1p1 processor detected
Info : [stm32f1x.cpu] target has 6 breakpoints, 4 watchpoints
Info : starting gdb server for stm32f1x.cpu on 3333
Info : Listening on port 3333 for gdb connections
[stm32f1x.cpu] halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x08000dc8 msp: 0x20005000
** Programming Started **
Info : device id = 0x20036410
Info : flash size = 64 KiB
** Programming Finished **
** Resetting Target **
shutdown command invoked

NOTE: In different Distro, the cfg file for OpenOCD may locate in different directories. You need to find it by yourselves.

By the way, if you use CMake

Note: When uploading binary file to STM32, it’s recommended to use .bin file instead of .elf file.
Please use the following script to convert the .elf to .bin and upload.

1
2
3
4
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON .
cmake --build ./build
arm-none-eabi-objcopy -O binary -S ./build/*.elf ./build/target.bin
sudo openocd -f /usr/share/openocd/scripts/interface/stlink.cfg -f /usr/share/openocd/scripts/target/stm32f1x.cfg -c "program ./build/target.bin reset exit 0x8000000"

Debug

You have three possible choices. I recommend using Ozone.

reference:
https://rohanrhu.github.io/gdb-frontend/tutorials/embedded-debugging/

reference:
https://blog.csdn.net/qq_41757528/article/details/127741620

Segger Ozone!!!

reference:
https://blog.csdn.net/weixin_41572450/article/details/124710818

Maybe the best debug tool for stm32

To use segger ozone, you need a different linker called jlink (originally we use st-link v2). You need to buy this linker first (maybe on Taobao or Amazon).

Install Ozone through:

1
yay -S ozone

Setup of ozone project:

  • Start Ozone
  • Choose Device
    • Device: STM32F103C8
    • Register Set: Cortex-M3
    • Peripherials (optional): /opt/SEGGER/Ozone/Config/Peripherals/STM32F103xx.svd
  • Connection Settings
    • Target Interface: SWD
    • Target Interface Speed: 4MHz
    • Host Interface: USB
  • Program File: select the binary file you have built (.elf is recommended).

Debug:

set some breakpoints and watch some variables of your interest.
Press the green “power” icon on the upper left corner to start (upload the program and start the debugging process)
Press the blue “play” icon besides “power” to continue.