MCU
文章平均质量分 63
yangkunhenry
阿猫
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
嵌入式系统中的中断向量表的存储位置
中断向量表位于 RAM 中,允许在运行时修改,适合动态中断处理场景。:中断向量表位于 FLASH 中,通常是固定的,适合大多数静态系统或不需要动态更改中断处理的场景。具体使用哪个常量取决于系统的需求。如果需要更灵活的中断处理,可以选择,而对于大多数嵌入式应用,默认使用即可。如何为中断向量表分配一个固定的 RAM 区域在嵌入式系统中,将中断向量表放置在 RAM 中通常需要在链接脚本(Linker Script)中为它分配一个固定的 RAM 区域。原创 2024-10-25 18:50:22 · 1806 阅读 · 0 评论 -
Keil编译器上Link-Time Optimization的作用
做个记录,明天开始写I2C 总线组成; I2C设备的原理图; I2C 是怎么工作的; I2C 读和I2C 写; 代码分析; 遇到哪些问题;原创 2024-09-27 19:23:38 · 667 阅读 · 0 评论 -
Keil编译器上Link-Time Optimization的作用是什么
总的来说,Link-Time Optimization 在 Keil 编译器中主要的作用是通过在链接阶段进行全局的优化,提升代码执行效率、减少代码冗余和可执行文件的体积,以及优化内存和计算资源的使用。:通过将各个编译单元的优化提升到链接阶段,LTO 可以让编译器在全局范围内执行更多复杂的优化技术,例如跨模块的函数内联、指令调度、数据流分析等。:通过全局分析,LTO 可以生成更加优化的代码路径,减少不必要的函数调用、分支和其他运行时开销,从而提高程序的执行速度。原创 2024-09-27 19:07:02 · 959 阅读 · 0 评论 -
字节不对齐导致的HardFault
假设你有一个32位(4字节)的整数,而它的内存地址需要是4的倍数才能保证对齐访问(即地址为0x0000、0x0004、0x0008等)。在Cortex-M0这种不支持非对齐访问的处理器上,上面的代码将会导致HardFault,因为处理器期望32位数据存储在4字节对齐的地址(即地址是4的倍数)。非对齐访问造成的HardFault并不只限于Cortex-M0单片机,其他基于ARM架构的处理器也可能出现类似的问题。在这个例子中,地址 0x1000 是4的倍数,因此这是一个对齐的访问,处理器可以高效地读取数据。原创 2024-09-27 10:37:34 · 2179 阅读 · 0 评论 -
GD32 JTDI脚的复用问题
项目上有用到JTDI这个脚,复用做GPIO当时没有注意,直接用做了GPIO,一直无法控制这个Pin最后看了SPEC,发现这个默认是JTDI脚Default JTDI如果要用做GPIO的话(也就是PA15)的话要用REMAP的方式,这个顺序不要变,之所以这么说因为有网友在STM32上验证说:必须先打开时钟再Disable才可以 rcu_periph_clock_enable(RCU_AF); rcu_periph_clock_enable(RCU_GPIOA); gpi.原创 2021-01-21 11:58:14 · 3226 阅读 · 7 评论 -
GD32 ADC检测电压
GD32的参考电压在规格书上没有查到,但是由于GD32 和STM32的“某种关系“。。。STM32 的内部参考电压是1.2V,所以GD32的可以想象也是1.2V。(最终通过计算发现确实应该是1.2V)原创 2021-01-21 11:46:21 · 14075 阅读 · 0 评论 -
将中断向量表定位到RAM中,从RAM中引导执行中断服务
最近在解决一个问题,看到一篇代码,将中断向量表定位到RAM中,代码所在的文章在这里:https://www.silabs.com/community/mcu/32-bit/knowledge-base.entry.html/2017/05/09/emu_e110_-_potential-i2Pn大家都知道,MCU的中断向量表通常是在flash的0x00000000地址,这一点从你编译...原创 2020-04-27 11:53:05 · 7213 阅读 · 0 评论 -
MCU 跳入到SystemInit之后就不往下走了
刚在测试一个USB的小例子的时候,下载好了之后,调试发现跑到startup_gd32e10x.s的SystemInit之后就不动了。;/* reset Handler */Reset_Handler PROC EXPORT Reset_Handler [WEAK] IMPORT...原创 2020-03-14 17:46:41 · 2048 阅读 · 0 评论 -
system_gd32e10x.c分析
/*! \brief setup the microcontroller system, initialize the system \param[in] none \param[out] none \retval none*/void SystemInit (void){ /* FPU settings */ /* 如果要使用户...原创 2020-03-14 14:00:49 · 3656 阅读 · 0 评论 -
SPI + DMA
说一说DMA是什么东西,DMA本身的意思是Direct Memory Access,直接存取访问,可以看到这只是一种存取方式,或者说读写方式,或是直白点来说,就是直接读取,说的太直白了,感觉这个DMA这个词在脑子里感觉有点SB了,就这么一个破烂玩意儿起这个这个类似遇到DNA一样的玩意儿。直接存取或者直接读取写入什么呢?当然是数据了,从哪里读,或者往哪里写呢?这个问题好,后面会说到读取的位置...原创 2020-03-08 21:58:45 · 14124 阅读 · 4 评论 -
SPI Flash读取操作
今天看到有人在问SPI flash读取数据的方法,为什么这样读取?先给出一个函数,SPI的读取函数:/*! \brief read a block of data from the flash \param[in] pbuffer: pointer to the buffer that receives the data read from the flash...原创 2020-03-06 21:04:36 · 6943 阅读 · 12 评论 -
GD32 starup_gd32e10x.s分析
;/*!; \file startup_gd32e10x.s; \brief start up file;; \version 2017-12-26, V1.0.0, firmware for GD32E10x;*/;;/*; Copyright (c) 2017, GigaDevice Semiconductor Inc.;; ...原创 2020-03-05 14:43:15 · 1327 阅读 · 0 评论 -
keil error:#8:missing closing quote 处理
在KEIL中Options for Target 'Flash' -> C/C++ -> Misc Controls添加“--locale=english”。原因:MDK5采用UTF-8,提示很多个这样的error:#8:missing closing quote 的错误信息。提供以下几种方式解决:第一种: 把报错提示的文件(包括.c和对应.h)用Notep...原创 2020-02-14 10:37:26 · 1182 阅读 · 0 评论 -
GD32 调试TMP1075的问题
I2C口没有用对,本来应该是I2C1,我配置成了I2C0、 /* Tmp1075 i2c 7-bit address */ #define TMP1075_I2C_ADDRESS (0x48<<1) //这个地址要是slave address 左移一位 /* send slave address to I2C bus */ i2c_mast...原创 2019-06-18 21:08:32 · 1627 阅读 · 4 评论 -
AW3215A 设置截止电流问题
void CHG_Done_Current_Set(void) { GPIO_PinModeSet(gpioPortC, CHG_CTRL_PIN, gpioModePushPull, 0); for(int itemp = 16; itemp > 1; itemp--); //延时5us左右 GPIO_PinModeSet(gpioPortC, CHG_CTRL...原创 2019-08-18 14:02:31 · 702 阅读 · 0 评论 -
GD32 低功耗下的唤醒问题(二)
接上一篇的问题DeepSleep 状态下能否用RTC来唤醒呢?先来看一个问题,前面介绍说,DeepSleep模式下只能EXTI的中断或者事件来唤醒问题来了,为什么只能通过EXTI的中断或者事件来唤醒?EXTI何方神圣?就是个中断控制器,Cortex M内核 集成了这个东西,哦,不,Cortex M 集成了叫NVIC的东西 (嵌套式矢量型中断控制器)。而EXTI...原创 2019-07-11 19:32:10 · 8955 阅读 · 6 评论 -
GD32 Systick系统定时器
之前没有在意,在demo程序的开始都有这样一个函数systick_config();以为是设置系统时钟啥的。今天看了下,做下标记这个函数对整个程序的作用1:提供一个函数函数(接口);2:在有RTOS系统的程序中用做调度的最小周期;(如果还有其他啥作用我没说到请拍砖上来。。。)对应这个systick.c有几点说的1:volatile static uint32_...原创 2019-07-05 14:01:47 · 9571 阅读 · 2 评论 -
GD32 之低功耗下的唤醒问题(一)
GD32 省电模式有三种如下之前用过的EFM32 有4中低功耗模式(对比下来就知道EFM32在功耗方面是多么领先)目前的场景是要循环的读取温度sensor的数据,每隔一定的时间读取一次,并且在整个设备运行期间,要及时的响应按键的长按和短按,首先想到的就是deep sleep模式了。OK,尝试一下,循环读取循环读取我采用timer的方式,每隔2s读一次,设定好timer,读取...原创 2019-07-11 15:45:03 · 7439 阅读 · 0 评论 -
GD32 开机直接进入了深度睡眠模式导致无法下载
刚开始研究GD32的功耗,烧录了开机直接进入深度睡眠的程序 /* PMU clock enable */ rcu_periph_clock_enable(RCU_PMU); /* enter Deep-sleep mode */ pmu_to_deepsleepmode(PMU_LDO_LOWPOWER, WFI_CMD);导致在下次烧录的时候无法烧录。原因是刚开机就...原创 2019-07-01 18:43:54 · 6877 阅读 · 4 评论 -
GD32 USART0 初始化问题
昨天在参照GD32的例子做GPIO Rmap为USART0的时候,发现USART0一直无法输出串口数据。最后在参照STM32的USART0初始化的时候,发现需要enable AFIO所以参照STM32就在初始化之前调用了下enable RCU_AF clock的动作,然后USART 就可以正常工作了。void dw_usart_config(void){ rcu_peri...原创 2019-06-18 16:32:28 · 7817 阅读 · 15 评论 -
GD32 system clock
int main(void){ systick_config();void systick_config(void){ /* setup systick timer for 1000Hz interrupts */ if (SysTick_Config(SystemCoreClock / 1000U)){ /* capture error */ ...原创 2019-06-22 17:44:03 · 1512 阅读 · 0 评论 -
GD32 Timer调试
GD32Timr定时器看起来比较复杂啊。一看GD32E10x 的SPEC:一个高级定时器,三个通用定时器,还有一个基本定时器。项目上想用来做分时处理程序都不知道用哪个?就用通用的定时器 timer1看下clock treeTIMER1的时钟是CK_TIMER1,要提供CK_TIMER1需要TIMER1 enable并且需要提供具体的时钟具体的时钟if(APB1 pre...原创 2019-06-22 17:04:22 · 12055 阅读 · 4 评论 -
GD32 RTC 调试之NVIC设置
一:设置NVIC组,使能 RTC irq,设置RTC优先级(抢占优先级和响应优先级)void nvic_configuration(void){ nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2); nvic_irq_enable(RTC_IRQn,1,0);}nvic_priority_group_set(NV...原创 2019-06-21 21:50:31 · 12534 阅读 · 1 评论 -
GD MCU 例子分析
以一个I2c EEPROM为例子int main(void){ /* configure systick */ systick_config(); /* configure LEDs */ led_config(); /* configure USART */ gd_eval_com_init(EVAL_COM...原创 2019-06-15 16:19:37 · 3687 阅读 · 0 评论
分享