推荐阅读最新更新时间:2024-03-16 15:32
stm32 u8g2移植笔记
前言 当初想写一个单色屏菜单时,曾移植过u8g2到STM32平台(这里用的是keil MDK),不过当时一直有一个问题没有搞懂:为什么u8g2用在flash为32k,ram为2k的arduino uno上都不会报空间不足,却在flash为512k,ram64k的stm32zet6上报错空间不足?这是由编译器导致的,arduino使用的是avr-gcc编译器在编译的时候会加-ffunction-sections -fdata-sections,链接的时候会加-Wl,-gc-sections选项,因而可以只链接用到的函数。stm32编译选项中有个类似的选项One ELF Section per Function,勾选该项可以极大的减少
[单片机]
STM32 在 KEIL 下使用 SWV 输出调试信息
—— 使用STM32,个人认为 keil 还是首选 SWV 需要占用一个引脚 PB3/JTDO/TRACES WO 与 JTDO 复用,使用 SW 时,这一脚将被占用,作为 TRACES WO,一般常见仿真器直接支持 首先重写 fputc #include stdio.h int fputc(int c, FILE *f) { ITM_SendChar(c); return(c); } 就可以使用 printf 输出调试信息,但实际上我这么做失败了,初始化的时候不知道卡在了哪里,也不弄了,反正 ITM_SendChar 一样可以输出。 打开工程选项: - project - options for target - Debug 标
[单片机]
stm32学习笔记(三)串口通讯实验
#include sys.h #include usart.h ////////////////////////////////////////////////////////////////////////////////// //如果使用ucos,则包括下面的头文件即可. #if SYSTEM_SUPPORT_OS #include includes.h //ucos 使用 #endif ////////////////////////////////////////////////////////////////////////////////// //本程序只供学习使用,未经作者许可,不得用于其它
[单片机]
Microchip加倍LCD PIC18单片机闪存及RAM容量以降低成本
PIC18F85J90系列单片机可提供集成的LCD模块、32 KB闪存及内部电压控制器,瞄准成本敏感的嵌入式显示应用 全球领先的单片机和模拟半导体供应商——Microchip Technology Inc.(美国微芯科技公司)推出6款集成了液晶显示器(LCD)模块的8位PIC单片机系列新产品。PIC18F85J90系列的闪存及RAM存储器容量比现有的64及80引脚系列器件增加了1倍,适用于需要嵌入式控制的高成本效益的人机接口应用,包括恒温器、民用表具及医疗仪器。存储容量的增加有助于用户增加更多诸如语音回放的复杂功能,拥有更多的自编程存储器分配,同时利用3V PIC18 J系列的制造工艺技术节省了成本。 具有片上LCD模块的PI
[新品]
IAR STM32 函数和变量的绝对地址定位
昨天我突然冒出个想法,能否利用函数和变量的绝对定位,实现程序的模块化更新。 也就是说,如果我要改变某个函数,只需要更新flash里面一个局部,也许只需要更新几百个字节,而无须重新下载整个上百K的程序。 经过查找资料和反复实验,终于实现了,现总结如下: 1) 把函数定位在FLASH高端的指定位置,以后更新,只更新那小块地方就可以了。 方法一: IAR里面进行函数定位, 必须要在.icf里面,进行定义。 void sendstr(unsigned *buf,unsigned short len) @ .sendstr { .... } .icf文件,加入这样一句: place at add
[单片机]
STM32的FSMC地址块划分
注意:每个区都有独立的寄存器控制,都有单独的片选引脚,故每个区都可以接不同的外设。
[单片机]
STM32对码盘的正交信号处理
STM32的每个TIMER都有正交编码器输入接口,TI1,TI2经过输入滤波,边沿检测产生TI1FP1,TI2FP2接到编码器模块,通过配置编码器的工作模式,即可以对编码器进行正向/反向计数。 如下图,编码器使用了A,B两相信号,但是我只需要对TI1信号进行计数(第一行),我也是刚发现了这个错误,原来对两个信号都计数,导致码盘转一周得到不止100个脉冲(100线的光电码盘)。通过STM32的编码器模块比较两想的电平信号就可以很容易地计算出编码器的运行情况了。 下面是调试OK的代码: void Encoder_Configration(void) { GPIO_InitTypeDef GPIO_InitStruct
[单片机]
STM32(一) 汇编操作GPIO
平台:keil4.72 开发板:stm32F103 72M 测试代码: 汇编: __asm void asm_LED1_TOGGLE(void) { ;GPIOA_ODR EQU 0x4001080C| LDR R0, = 0x4001080C LDR R1, ;R1 = *R0 EOR R1,#0x0100 ;r1 = r1^0x0100 STR R1, ;*R0 = R1 BX LR ; } 对应的C void c_LED1_TOGGLE(void) { GPIOA- ODR ^= GPIO_Pin_8; } 测试用主函数 int main(v
[单片机]