如何学会自己写代码控制STM32(裸机)-GPIO篇 //总结自己的工作经验帮助学习单片机的入门者快速上手写代码该文章是基于STM32F401裸机代码编写思路后续会更新增加STM32FreeRTOS首先想要写单片机的程序你必须有扎实的C语言基础从我多次面试的经验总结嵌入式软件岗位的面试会对你C语言水平进行严厉考核。现在的单片机程序很多都是HAL库和标准库函数初学者很难理解。想自己写单片机程序一定离不开单片机的参考手册(可以从官网获取)这里很多人会拿着从立创商城下载的数据手册然后发现和我说的不一样因为数据手册只是告诉你这个单片机有什么功能有多少引脚。。不会教你怎么写程序。我个人觉得当你学会使用寄存器写单片机程序时就代表你可以开始自己写代码了如果你只会调用HAL库或者标准库函数那你就是会维护程序。单片机入门学习不要好高骛远只有一步一个脚印才会让你走得更远这里的一步一个脚印就是你写一个代码实现一个功能当你成功的点亮一个灯、你就学会了拉高拉低GPIO的引脚电平当你学会驱动舵机你就学会了使用PWM调节占空比而PWM可以通过翻转引脚电平进行调节占空比也可以配置GPIO引脚复用为定时器引脚输出PWM波形通过修改定时器的ARR来调节PWM01时钟时钟很重要首先你需要确定你用的单片机的系统时钟频率是72M还是84M时钟源是外部晶振HSI还是内部RC振荡器HSE这里的代码一般在配置文件里一般不需要自己写但你需要看懂不然后面的定时器、串口出问题很有可能就是时钟配置的不对。02GPIOGPIO常用的寄存器每个 GPIO 端口如 GPIOA、GPIOB有 7 个核心寄存器32位低16位对应 Pin0~Pin15。寄存器全称作用位宽MODERMode Register模式输入/输出/复用/模拟2位/PinOTYPEROutput Type Register输出类型推挽/开漏1位/PinOSPEEDROutput Speed Register输出速度低/中/高/很高2位/PinPUPDRPull-up/Pull-down Register上拉/下拉/无2位/PinIDRInput Data Register读取引脚电平1位/PinODROutput Data Register输出高低电平1位/PinBSRRBit Set/Reset Register原子操作置1/清0低16位置1高16位清0关键技巧用BSRR代替ODR操作避免“读-改-写”导致的竞争问题。GPIO引脚寄存器配置程序配置PA5为推挽输出GPIO复用引脚寄存器配置程序配置PA9、PA10复用为USART1_TX和RX03TIMER04USART05SPI06IIC07EXIT08NVIC09DMA直接给你一份参考手册你看一年都写不出程序你需要拿到一份程序对照参考手册然后抄一遍自己尝试写一遍用流程图画出程序功能再根据功能一步一步的写程序当然这只是入门而已。入门以后要学会用假定时器、环形缓存区、无敌结构体标志位、任务调度(时间片调度)等需要理解驱动层、应用层、协议层一定要学会自己看参考手册自己配置寄存器实现自己需要的功能思考如何实习需要哪些外设功能、哪些寄存器写程序不是写文章硬靠自己编一定要学会参考学会查资料写程序从来不是从0到1而是从0.75到1你想要完全掌握单片机的寄存器你可以按照官方给的标准库函数按照他的库函数封装用寄存器翻译过来然后多练、多看、多思考如果该文章反馈较好会继续更新。。。。