Aug 9
MCU:AT89S51  
Freq:12M  
edit Tab:4  
driver:HT1621B
Aug 8
STM32开发板实验程序
硬件: RS - RW - EN   引脚用10K电阻上拉,CRL 设置为开漏输出
硬件: PB0--PB7 数据脚用10K电阻上拉,CRL 设置为开漏输出

#ifndef                _LCD1602_H
#define                _LCD1602_H
//======端口位清除寄存器=
#define      LCD1602_RS0           GPIOE->BRR  = 0x00000004 //低电平  PE.2
#define      LCD1602_RW0           GPIOE->BRR  = 0x00000010 //低电平  PE.4
#define      LCD1602_EN0           GPIOE->BRR  = 0x00000040 //低电平  PE.6

//========端口位设置/清除寄存器
#define      LCD1602_RS1           GPIOE->BSRR = 0x00000004 //高电平  PE.2
#define      LCD1602_RW1           GPIOE->BSRR = 0x00000010 //高电平  PE.4
#define      LCD1602_EN1           GPIOE->BSRR = 0x00000040 //高电平  PE.4
#define      DATA_OUT              GPIOD->ODR//数据端口 PB0-PB7
Aug 6

Intel HEX文件格式 不指定

eyeman , 10:00 , 汇编 , 评论(0) , 引用(0) , 阅读(2324) , Via 本站原创
Intel HEX文件是由一行行符合Intel HEX文件格式的文本所构成的ASCII文本文件。在Intel HEX文件中,每一行包含一个HEX记录。这些记录由对应机器语言码和/或常量数据的十六进制编码数字组成。Intel HEX文件通常用于传输将被存于ROM或者EPROM中的程序和数据。大多数EPROM编程器或模拟器使用Intel HEX文件。

记录格式
Intel HEX由任意数量的十六进制记录组成。每个记录包含5个域,它们按以下格式排列:
:llaaaatt[dd...]cc
每一组字母对应一个不同的域,每一个字母对应一个十六进制编码的数字。每一个域由至少两个十六进制编码数字组成,它们构成一个字节,就像以下描述的那样:
: 每个Intel HEX记录都由冒号开头.
ll 是数据长度域,它代表记录当中数据字节(dd)的数量.
aaaa 是地址域,它代表记录当中数据的起始地址.
tt 是代表HEX记录类型的域,它可能是以下数据当中的一个:
00 – 数据记录
01 – 文件结束记录
02 – 扩展段地址记录
04 – 扩展线性地址记录
dd 是数据域,它代表一个字节的数据.一个记录可以有许多数据字节.记录当中数据字节的数量必须和数据长度域(ll)中指定的数字相符.
cc 是校验和域,它表示这个记录的校验和.校验和的计算是通过将记录当中所有十六进制编码数字对的值相加,以256为模进行以下补足.
Aug 1
DMA 的初始化
Init DMA
    *dma_ccr7 = 0xFFFF8000; // clear ccr
    *dma_ifcr = 0x0F000000;    // clear dma channel 7
    *dma_cpar7 = (unsigned int)usart2_dr; // ph address
    *dma_cmar7 = (unsigned int)uart_buf; // mem address
    *dma_cndtr7 = (unsigned int)uart_buf_cnt; // count
    *dma_ccr7 = 0xFFFF9092; // set PL=medium Msize=8bit Psize=8bit Mem_inc=1 Ph_inc=0 Circ=0 Dir=Mem->Ph Complete_Enable=1 En=0
Tags:
Aug 1
目的: 在LCD上显示图片

方案: 由于STM32F107VC内置内存只有64K,不足以全屏显示板载LCD,SSD1289,320x240x16bit
        图像数据只能通过外部存储设备读入,板置W25X16,或SD。数据需要提前导入。
        另一个方案是通过数据连接在运行时实时传输,USART,LAN,或USB。需要数据服务端程序。
        通过SD传输是开发量最少且可以独立运行的方案

研究: 板载有2个SD卡槽,主板卡槽和LCD板背部槽。
        由于主板卡槽使用的CS线与LCD的CS冲突,于是选择LCD板背后有SD卡插槽
        该槽使用SPI3驱动,与AFIO的Remap连接
Tags:
Aug 1
加入控制逻辑,全部代码如下,不再依靠STM32标准库编译:
void led_init() {
//RCC init
    volatile unsigned int *rcc_apb2enr;
    volatile unsigned char *rcc;

    volatile unsigned char *gpiod;
    volatile unsigned int *gpiod_ctl;
    unsigned int gpio_ctl_speed;
    unsigned int gpio_ctl_output_n;
    
    rcc = (unsigned char*)0x1000; //rcc base
    rcc += 0x20000; // ahb base
    rcc += 0x40000000; // per base

    rcc_apb2enr = (unsigned int*)(rcc + 0x18);  //apb2enr

    (*rcc_apb2enr) |= (unsigned int)0x21; // rcc_gpiod and rcc_afio
Tags:
Aug 1
本文对STM32的SPI3读写SD卡进行讨论,读写使用直接模式,DMA模式,和DMA中断模式,并尝试对各种模式进行比较

一般来讲,使用DMA模式的优点在于,节省主程序资源,在直接对CPU/MCU编程的环境中,DMA模式类似于线程的效果。尤其在对实时处理比较严格的环境,如视频播放或采集,DMA会发挥重要作用,主程序更着眼于进行资源分配和流程控制。

SPI初始化DMA和中断
使用SPI的DMA功能,需要首先对相关寄存器初始化
SPI3使用DMA2的Channel1接收数据,Channel2发送数据,(参照STM32参考手册)
Tags:
分页: 6/24 第一页 上页 1 2 3 4 5 6 7 8 9 10 下页 最后页 [ 显示模式: 摘要 | 列表 ]