ARM
1.包括M0,ARM9,M3,M4等,
2.使用KEIL4/5工具开发,
3.偏向底层驱动和中间层应用。
夕阳下的枫林
精通电路设计 嵌入式C语言
ARM DSP等开发
擅长数字信号处理 音频信号处理
了解FPGA/LINUX/RTOS
展开
-
STM32之外部中断
首先配置外部中断的输入引脚和中断源:void LCR_Config(void){ EXTI_InitTypeDef EXTI_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; /* Enable GPIOC clock */ R...原创 2019-07-15 09:28:25 · 232 阅读 · 0 评论 -
STM32之Timer定时器
定时器属于常见功能,程序如下:/*********************************************************************************************************函 数 名: TimerApp_Init功 能: 定时器初始化参 数: p_s_Base_Add - TIM选择 ...原创 2019-07-05 10:05:52 · 780 阅读 · 0 评论 -
STM32之看门狗
看门狗就是当程序跑飞不能按时喂狗的时候进行芯片复位,看程序: /* 独立看门狗初始化,(1000000/40K)*256*800=5.12s*/ BSP_IWDG_Init(IWDG_Prescaler_256, (uint16)800);void IWDG_ReloadCounter(void){ IWDG->KR = KR_KEY_Reload;}以上就是初始...原创 2019-07-04 09:02:20 · 631 阅读 · 0 评论 -
STM32之UART
STM32的UART的驱动代码如下:void BSP_Uart_SetBaud(uint32 u32Baud){ GPIO_InitTypeDef s_GPIO_InitStructure; USART_InitTypeDef s_USART_InitStructure; NVIC_InitTypeDef s_NVIC_InitStructure; RCC_APB2Per...原创 2019-07-03 09:43:47 · 855 阅读 · 1 评论 -
STM32之SPI
STM32的SPI还是比较容易理解的,先看代码。下面是初始化的代码:/* *******************************************************************************功能:初始化参数:无返回:无************************************************************...原创 2019-06-01 09:14:57 · 850 阅读 · 0 评论 -
STM32之GPIO口
STM32笔者这里之STM32F1XX和F4XX系列的M3,M4的内核。库函数的名字一般叫做STM32Fxxx_GPIO.c和.h以F107为例,初始化GPIO的程序如下:void BSP_GPIO_Init( void ){ GPIO_InitTypeDef s_GPIO_InitStructure; RCC_APB2PeriphClockCmd( RCC_APB...原创 2019-05-23 15:14:13 · 494 阅读 · 0 评论 -
STM32 同一组SPI总线上挂接不同协议的SPI芯片的问题
笔者最近工作的时候遇到了同一组SPI总线挂接了两种SPI芯片,一种是上升沿获取数据,一种是下降沿获取数据。明明有其他SPI总线可以用,在此就不吐槽硬件同学了。由于这两个芯片在程序运行中会反复查询,所以SPI会反复初始化。在调试的时候一般都是使用stm32f10x_spi.c中的这个函数void SPI_Init(SPI_TypeDef* p_SPIx, const SPI_I...原创 2019-04-25 14:37:25 · 2397 阅读 · 0 评论 -
S3C2440之启动文件
这是从一个大神手里获取的启动文件的注释,相当丰富,有利于学习汇编和了解ARM的启动过程,下面一起来看一下程序:;=========================================; NAME: 2440INIT.S; DESC: C start up codes; Configure memory, ISR ,stacks; Initialize C-...原创 2019-01-16 17:26:25 · 364 阅读 · 0 评论 -
S3C2440之按键中断
按键中断是最常用也是最简单的中断,程序代码如下:/*******************************文件名:key.c *功能: 按键程序 *创建者: 潘星宇 *最后修改:2013.03.26 *备注: * *******************************/#...原创 2019-01-16 17:20:18 · 248 阅读 · 0 评论 -
S3C2440之初始化
S3C2440是三星的一款32位以ARM9为核心的ARM芯片,主频高达400MHz,有MMU,支持LINUX,初始化程序如下:/*******************************文件名:main.c **功能: 主程序 **创建者: 潘星宇 **最后修改:2017.04.28 **备注: ** *...原创 2019-01-02 19:08:48 · 578 阅读 · 0 评论 -
S3C2440之IIC
IIC个人感觉驱动的中断步骤还是挺麻烦的,要按照步骤流程来,程序如下:/*******************************文件名:IIC.c **功能: AT24C02底层驱动 **创建者: 潘星宇 **最后修改:2013.03.20 **备注: ** ***********************...原创 2019-01-15 19:01:20 · 370 阅读 · 0 评论 -
S3C2440之触摸屏(一)
1. 触摸屏简单的讲,其实就是在LCD屏上加了一层触摸膜,如果是电阻屏,感知的是电压的不同,如果是电容屏,感知的是电流的不同。2. 然后通过一个AD转换芯片通知ARM芯片,LCD有分辨率,以320X240的分辨率和电阻屏为例,对应这么多个点,触摸到哪个点,返回的电压也是不同的,但是由于接触的物体一般接触点较大,3. 触摸屏使用的时候一般都是做个框,在框内的坐标所有点都认为触发的是同...原创 2019-01-13 20:19:29 · 587 阅读 · 0 评论 -
S3C2440之触摸屏(二)
接上节https://blog.csdn.net/pxy198831/article/details/86434989S3C2440之触摸屏(一)触摸屏校正之后,可以存储在EEPROM中,校准主要是为了获取差错计算参数,通过在EEPROM中某一地址中数据来判断是否进行了初始化校准。校准程序如下:/****************************************...原创 2019-01-14 17:28:23 · 157 阅读 · 0 评论 -
S3C2440之UART(一)
S3C2440的串口比较简单,基本上就是波特率、数据位、校验位、通道号、停止位配置OK即可//===================================================================// File Name : 2440lib.c// Function : S3C2410 PLL,Uart, LED, Port Init// Date ...原创 2019-01-12 09:00:54 · 468 阅读 · 0 评论 -
S3C2440之UART(二)
https://blog.csdn.net/pxy198831/article/details/86346027S3C2440之UART(一)介绍了S3C2440的UART驱动,下面看应用主函数通过调用 Uart_Select(0); //选择串口0 UART_INT_initialize (); 一个选择串口,一个配置中断,库函数都在ht...原创 2019-01-12 09:09:54 · 194 阅读 · 0 评论 -
S3C2440之液晶屏LCD驱动
作为一款高端的CPU S3C2440(2013年的时候),自带LCD液晶屏的UI接口,也就是外设,只需要对照对应的LCD手册设置寄存器即可所用LCD是一款16BPP的320(宽)X240(高)的LCD显示屏/*******************************文件名:LCD.c **功能: 液晶显示程序 **创建者: 潘星宇 **最后修...原创 2019-01-10 20:53:35 · 458 阅读 · 0 评论 -
S3C2440之设置系统时钟
任何一个ARM初始化的时候一般都会优先设置系统时间,尤其是在设置一些与系统时钟息息相关的外设的时候,S3C2440也不例外,系统时钟设置如下:/*******************************文件名:clock.c **功能: 电子钟 **创建者: 潘星宇 **最后修改:2013.03.7 **备注: *...原创 2019-01-09 23:07:13 · 259 阅读 · 0 评论 -
S3C2440寄存器映射表
S3C2440的驱动不再调用库函数,而是直接使用寄存器映射,其对应关系如下段代码//=============================================================================// File Name : 2440addr.h// Function : S3C2440 Define Address Register//...原创 2019-01-07 20:36:11 · 550 阅读 · 0 评论 -
S3C2440 I/O口与按键中断
S3C2440,仍然从最简单的IO口开始,不过加上IO中断,用于按键控制,不再使用库函数,而是直接调用寄存器,寄存器映射见我的另外一篇文章https://blog.csdn.net/pxy198831/article/details/86025258 S3C2440寄存器映射表/*******************************文件名:key.c *功能: ...原创 2019-01-07 20:32:40 · 246 阅读 · 0 评论 -
S3C2440之MMU
MMU,即内存单元管理,是嵌入式芯片搭载LINUX必备条件。即使不搭载LINUX,一旦 启用了MMU,程序运行速度飞快,最直接的感受就是原来一个deley(10);现在估计要delay(100)甚至更高才能达到同样的延迟效果。MMU初始化代码如下:/************************************************ NAME : MM...原创 2019-01-06 18:45:51 · 305 阅读 · 0 评论 -
S3C2440程序仿真和下载
S3C2440不同于一般的M0~M7的内核的ARM,片内的FLASH太少,一般不在片上运行程序,其仿真和固化(程序FLASH下载)都采用片外的芯片,这点与DSP芯片C5509很像,先来说仿真,运行在片外内存上,需要下面这个文件:/******************************************************************************/...原创 2019-01-03 20:11:28 · 1121 阅读 · 0 评论 -
NUC140之工程初始化
本人的所选的时NUC140VE3AN,50MHz主频,128K字节 FLASH,16K字节RAM。工程起步的话最好从开发版例程或者网上下载,自己从零新建工程的话需要如下一些文件还需要官方的库函数以及对应的库文件之后还要正确设置KEIL工程(如果用的是KEIL开发的话)这些对入门者来说都不友好,所以建议在别人新建好的例程上进行二次开发,省时省力,尤其是现如今ARM芯片种类...原创 2018-12-21 12:51:31 · 328 阅读 · 0 评论 -
NUC140之PLL(频率合成器LMX2541)
PLL 是一种集成了锁相环、鉴相器、振荡器为一体的频率合成芯片,以LMX2541为例,它是一款小数分频的频率合成器,输出频率31.6MHz~4GHz,具有非常好的相位噪声和杂散指标。采用SPI控制驱动程序如下:#include "PLL_Thread.h"#include "DrvSPI.h"const int16_t OffSetArray[] = {8000, 7500, 7...原创 2018-12-29 16:21:44 · 1836 阅读 · 1 评论 -
NUC140之中断
中断属于比较深入的ARM课程了,可以简单理解为在程序正常循环运行中,满足一定程度的条件就会打断该循环,优先运行。最简单的中断是I/O中断,一般分边沿触发和电平触发,边沿触发后,要判断电平的高低程度,也可以作防抖动处理,程序如下/******************************************文件名:VOP_OK_error_solution.c ...原创 2018-12-28 23:14:21 · 325 阅读 · 0 评论 -
NUC140之SPI和AD5441
NUC140的SPI库函数还是写的很不错的,我们看这个函数说明:/*---------------------------------------------------------------------------------------------------------*//* Function: DrvSPI_Open ...原创 2018-12-26 20:49:17 · 405 阅读 · 0 评论 -
NUC140之I2C和AT24C32
I2C总线一根数据线,一根时钟线,起始和终止条件如下:AT24C32是一款4K字节的EEPROM,它的字节写如下图:具体的文字描述结合我的程序一看就明白了,我的程序注释非常丰富/******************************************文件名:at24c32.c **功能:EEPROM读写程序 ...原创 2018-12-27 20:42:55 · 688 阅读 · 0 评论 -
NUC140之串口UART
UART可以说是串行通信用的最多的协议,相对其他协议也比较简单,一般只要设置好比特率,数据位,停止位和校验位即可。下面来看程序。#include "UART.h" #include <stdio.h>volatile static uint8_t Rx_UART[20] = {0}; //串口存储接收数据数组,加static作为静态全局变量仅能在本文件...原创 2018-12-25 20:22:14 · 875 阅读 · 0 评论 -
NUC140之设置主频
本人用的是NUC140VE3CN,这款芯片主频是50MHz,如果采用默认值的话大约为20多M,如何才能设置到50MHz呢。根据芯片手册,这款单片机的主频频率就是HCLK的频率,而HCLK要想达到50MHz,需要选择时钟源为PLL输出,在此我选用的外部晶振为12MHz。贴出程序如下:void setup_HCLK (void){ uint32_t u32PllCr; /*初始...原创 2013-02-01 19:57:24 · 1158 阅读 · 0 评论 -
NUC140之IO口
NUC140的I/O的作用,无非是输入、输出、双向和外设功能,这些功能是复用的,当上电未初始化时,根据芯片手册,NUC140的I/0口默认输出高电平。I/O的使用比较基础,初始化上述几个功能然后再使用即可,但是有几点需要注意。1.使用外设功能,例如UART等,要先将对应的引脚初始化为UART功能;2.如果I/O设置为双向功能,在读取数据前,最好先写1,再读。这样做是为了防止在读...原创 2018-12-24 12:24:51 · 331 阅读 · 0 评论 -
NUC140之看门狗
看门狗的原理:我见过的看门狗一般分为两种:一种是看门狗本身是个定时器,设定好时钟和初值后,如果在定时时间到达之前不喂狗(清除某个寄存器或置位某个位),芯片就会产生一个中断或者复位(像S3C2440A);另一种就是像NUC140这样的,定时时间到了以后会产生一个中断,然后延迟1024个看门狗时钟周期后才会复位芯片。这两种都需要喂狗,但是喂狗的语句所放置的地方就不同了。对于第一...原创 2013-02-25 21:11:46 · 1135 阅读 · 0 评论 -
NUC140之定时器2
继续上一篇的NUC140之定时器。如果我们在同一个工程里初始化了一个定时器例如TIMER0,并且用DrvTIMER_SetTimerEvent(参数省略)设置了事件,如果我们要修改进入事件的时间的话,一定要调用DrvTIMER_ClearTimerEvent(E_TMR0,0);这个函数,然后才能再用DrvTIMER_SetTimerEvent设置新的事件。也就是说,单片机初始化话之后...原创 2013-04-26 22:03:53 · 898 阅读 · 0 评论 -
NUC140之定时器
相信用过芯塘NUC1xx系列单片机的朋友们对NUC1xx 固件库函数一定不陌生.本人用的固件库版本是V1.05.001,在用定时器的库函数的时候发现了一个问题:本人用定时器监控一个信号,这个信号平时是高电平,当它变为低电平的时候,启动定时器,开始计时,假设计时时间为120S,如果这个信号保持低电平120S,则会触发中断函数,从而使这个信号不再起作用,如果在这120S内,这个信号恢复...原创 2013-01-23 19:23:31 · 1479 阅读 · 0 评论 -
NUC140之ADC
NUC140的ADC比较简单,只需要设定好时钟和采样模式就OK了下面先看初始化程序void ADC_initialize (void){ DrvADC_Open (ADC_SINGLE_END, //Single模式 ADC_SINGLE_CYCLE_OP, //单周期扫描模式 0xf3, //设置要转换的口为ADC0,1,4,5,6,7 /1111 0...原创 2013-03-10 20:05:14 · 1284 阅读 · 2 评论