In fact, whether something is simple or complex is not important; what matters is what we can learn through STM32.
Creating a keyboard/mouse allows us to learn the USB protocol.
Building a networked device requires understanding the underlying implementation of Ethernet and TCP/IP protocols.
For a wireless device, one might need to learn Bluetooth, Wi-Fi, or Zigbee protocols, and the final application may not necessarily have libraries or packages available, requiring us to write the low-level code ourselves. If using modules, one may need to learn SPI, I2C, or SDIO to connect the modules.
Developing a temperature control device or a balancing robot necessitates learning the PID algorithm.
Creating a camera may require understanding the SCCB protocol, and if one wants to delve deeper, knowledge of image processing may be necessary.
If this camera needs to connect to a PC for more in-depth processing, one must learn how to write a host application, which may involve designing protocols or writing a server. At this point, knowledge of server development and a programming language for server-side development, including but not limited to C++, Java, Python, or Node.js, is required. One may also need to learn a server framework. Servers typically have databases, so learning a simple NoSQL database is advisable, although MySQL and Oracle are also options.
If the host application requires a graphical interface, the simplest option might be Electron, although using C++ to call the Win32 API is better.
If one wants to implement facial recognition or image segmentation, knowledge of machine learning is required, possibly using Python with TensorFlow or PyTorch frameworks. Other languages can also be used, but they may be more complex. Machine learning is fundamentally based on mathematics, which can be quite challenging.
Nowadays, operations are often done on mobile devices; learning Android might be beneficial, and Java is a good starting point. If the mobile device happens to be an Apple product, learning Objective-C would be necessary.
If one wishes to go deeper and create a more complex device, designing a custom PCB is essential, which requires learning PCB design, as well as analog and digital electronics, and a deeper understanding of circuit principles.
On the software side, one might find that bare-metal programming is insufficient and may need to learn operating systems like uCOS or FreeRTOS, or even write an operating system kernel from scratch. If the system requires robustness and efficiency, a deep understanding of operating systems, data structures, algorithms, optimization, and assembly language is necessary.
All of the above content is substantial, and before you know it, you have learned a part of computer science and gained a basic understanding of it.
If anyone thinks this is a forced connection, it is not. All of the above simply describes using STM32 to create a processing unit for a small robot on the server side that can maintain balance, recognize faces, and be controlled from both PC and mobile devices.
Functions like voice recognition and dialogue systems have not yet been mentioned; these may require more knowledge of natural language processing and even reinforcement learning. You may find that the results are often not satisfactory, but this is not due to a lack of skill; it is a limitation of the world. Congratulations, you can read papers and write papers, contributing to breakthroughs in computer science and artificial intelligence.
What? You want to create a motion unit like Boston Dynamics? That would be even more complex. Otherwise, how do you think I got into this field?
The above is an expansion; what about deep learning?
Diving deep into technology can be daunting. For instance, after learning about the STM32 Cortex architecture, how are its registers, instruction sets, and memory implemented? Once you understand these, what type of latches are used, and how do the fetch and decode processes work? How is an adder implemented? After learning about transistors and Boolean logic, how do transistors operate? After understanding PNP and NPN, what are the common emitter characteristic curves? Why do carriers move, and what are forward and reverse biases? Why do phosphorus, silicon, and boron serve as semiconductor materials that facilitate electron flow? Can holes flow?
The key question is not what STM32 can do, but what we can do with STM32. What level of products can we create, how competitive are they in the market, and do they meet unfulfilled user needs, thereby filling market gaps? Technology is not independent; it is topological.
Learn to rise for the sake of blooming flowers, keep it up!!!
===
Feeling that it is simple is a sign that STMicroelectronics has succeeded.
How did STM32 stand out among many microcontrollers back in the day? Library functions, library functions, library functions. Before this, microcontrollers were mainly 51, AVR, PIC, MSP430, and so on. Writing a UART communication function required first going to CSDN to “borrow” from others, only to find that their implementations did not fully meet the requirements, leading to modifications, and gradually accumulating a personal library… only to discard it all when switching to the next microcontroller.
STMicroelectronics developed these library functions to lower the development threshold, allowing developers to focus on more abstract applications without needing to pay too much attention to the low-level aspects of microcontrollers, which is the big trend. STMicroelectronics seized this trend and took the lead to quickly capture the market. What? Writing directly to registers? Assembly? Such flashy skills are unnecessary for the vast majority of STM32’s target applications. What about cost sensitivity? Who chooses STM32 for cost sensitivity? A microcontroller that costs a few cents and can only be programmed in assembly is worth looking into.
Let’s look at it from another angle: is Arduino simple? Is thinking Arduino is simple a form of arrogance? Who cares whether you think Arduino is simple or not? Everyone is only concerned with what you have achieved using Arduino.
So, isn’t it a given that STM32 is simple? I’m curious why such an obvious fact would make someone doubt whether they are being arrogant.
Source:
Author: Jiang Yuchen https://www.zhihu.com/question/450708178/answer/1812354503
Recommended Reading:
Collection | Summary of Linux ArticlesCollection | Programming LifeCollection | C LanguageMy Knowledge CircleFollow my public account and reply “1024” to get the link to learning materials.Feel free to like, follow, share, and view; I will remember every encouragement you give me~
Embedded Linux
Scan the QR code to follow my public account