摘要:在超MINI核心板 stm32F103C8最小系统板上调试Usart2功能:用Jlink 6Pin接口连接WStm32f103c8的Uart2,PC机向mcu发送数据,mcu收到数据后数据加1,回传给PC,并把 D1 指示灯状态取反. 硬件连接:1、R27 悬空不焊接;2、将P输出TTL接口的TX连...
阅读全文
摘要:FreeModbus For stm32:点击下载源码 1、测试环境Keil MDK 4.7a stm32f103c8, PB12为输出线圈, 可以通过Modbus Poll来控制线圈的输出状态。 2、通过ModbusProt.h配置硬件、数据缓冲区大小和功能码配置 #define UART_USE ...
阅读全文
摘要:阅读前提:假设读者对CAN总线和485总线有一定了解。 RX485连接CAN用法提出背景: 在一般情况下只能是CAN对CAN 485对485, 但是在调试过程中难免对出现设备没有CAN接口,或是没有485接口,或是端口不够用,导致无法进行调试工作。比如项目初期画的电路可能少CAN接口,或是少485接口,开发过程中由于设备的增加,导致端口不够用或是接口不兼容。PLC一般只有485或422接口。连...
阅读全文
摘要:stm32可选的时钟源 在STM32中,可以用内部时钟,也可以用外部时钟,在要求进度高的应用场合最好用外部晶体震荡器,内部时钟存在一定的精度误差。 准确的来说有4个时钟源可以选分别是HSI、LSI、HSE、LSE(即内部高速,内部低速,外部高速,外部低速),高速时钟主要用于系统内核和总线上的外设时钟。低速时钟主要用于独立看门狗IWDG、实时时钟RTC。 ①、HSI是高速内部时钟,RC振荡器,频率...
阅读全文
摘要:要解决一个问题就怕不知道怎么搜索,或是别人没有遇到过: 同样碰到Keil MDK Debug调试无法设置断点问题,首先来问百度,GOOGLE,一下是我搜索到的结果: 1、keil 不能设置断点,每次点调试都出现以下对话框, 有几个按钮不能点。 解决办法:购买正版Keil或够找破解包,worldsing笔记里有(仅供学习用),商业请支持正版; 2、软件能Debug, 硬件无...
阅读全文
摘要:关于堆和栈已经是程序员的一个月经话题,大部分有是基于os层来聊的。 那么,在赤裸裸的单片机下的堆和栈是什么样的分布呢?以下是网摘: 刚接手STM32时,你只编写一个 int main() { while(1); } BUILD://Program Size: Code=340 RO-data=252 RW-data=0 ZI-data=1632 编译后,就会...
阅读全文
摘要:简单原则少ROM,少RAM,任务完成就让出CPU,调度器描述: 1、按最大任务数轮番调度; 2、任务调用延时接口将让出CPU使用权,进入下一个任务调度; 3、用户任务都处于延时或是不使用CPU运行Idle任务; 4、最大任务数255; 5、任务用独立栈,栈大小由用户自定义; 6、调度器无需初始化,代码为单个C文件,结构简单,代码尺寸小; 7、调度器加3个任务代码尺寸:Code=142...
阅读全文
摘要:在大多OS里都存在Idle线程或任务,同样uCos也不例外,为什么估计很少有人细研究。为什么设立Idle? 能不能去了? 首先看看uCos中关于Idle的代码做个介绍: config.h里对Idle的配置: #define OS_LOWEST_PRIO 7 /* 最低优先级,OS_LOWEST_PRIO即空闲任务优先级(0 ~ 63) */ ...
阅读全文
摘要:1、uCOSii V2.52 a、加了7个可以配置的钩子函数宏 #define OS_TASK_CREATE_HOOK_EN 0 /* 任务创建时调用钩子函数 使能 1 / 禁止 0 */ #define OS_TASK_STAT_HOOK_EN 0 /* 统计任务运行时调用钩子函数...
阅读全文
摘要:有关于uCos的启动过程讲解有很多文章,这里主要记录已下OSStartHighRdy()在stm32下是怎么写和运行的: stm32上电 运行SystemInit(): 配置时钟,这个不要也可以,不要就是8MHz时钟 运行main() : 调用OSInit(), OSTaskCreate()一个任务,OSSart() OSInit():...
阅读全文
摘要:原来学uCos只是表面,今天才发现uCos没有心跳也是可以活的,只是延时功能。 即:OSTimeDly、OSTimexxx 头的功能不能使用。如果有是用OSTimexxx,任务将会卡死。其实,OSTimeDly 功能就是延时指定时间再唤醒任务。延时过程中任务是挂起状态,时间到后,等待高任务运行完后在运行。下面测试不开cpu硬件定时器情况下的程序://Task0由 MainTask建立,优先级为2void Task0 (void *pArg){ pArg = pArg; while(1) { GPIOB->ODR &= ~GPIO_Pin_14; OSTaskSuspend(2);
阅读全文
摘要:SysTick是CM内核独立的定时器,时钟可以用内核内部的,也可以用芯片厂家(ST)的时钟,参考《Cortex-M3权威指南》的第13章: 另外也可以考《STM32F10xxx Cortex-M3 programming manual.pdf》第4章CM3系统外设,从手册来看,ST应该只提供了内核外部时钟,而外部时钟又分成两种:HCLK/8 和 HCLK, ST官方提供...
阅读全文
摘要:在单片机系统中, 如果并行口的IO资源不够,而串行口又没有其他的作用, 那么我们可以用74LS164来扩展并行IO口,节约单片机资源。 74LS164是一个串行输入并行输出的移位寄存器。并带有清除端。 其中: Q0—Q7 并行输出端 。 A,B串行输入端。 MR 清除端, 为0时,输出清零。 CP 时钟输入端。 74LS164引脚定义: 74LS164...
阅读全文
摘要:74HC595是硅结构的CMOS器件, 兼容低电压TTL电路,遵守JEDEC标准。 74HC595是具有8位移位寄存器和一个存储器,三态输出功能。 移位寄存器和存储器是分别的时钟。 数据在SHcp(移位寄存器时钟输入)的上升沿输入到移位寄存器中,在STcp(存储器时钟输入)的上升沿输入到存储寄存器中去。如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲。 移位寄存器有一个串行移位输入(D...
阅读全文
摘要:DS18B20是DALLAS公司生产的一线式数字温度传感器,具有3引脚TO-92小体积封装形式;温度测量范围为-55℃~+125℃,可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃。主机控制DS18B20完成温度转换必须经过三个步骤:初始化、ROM操作指令、存储器操作指令。必须先启动DS18B20开始转换,再读出温度转换值。本程序仅挂接一个芯片,使用默认的12位转换精度,外接供电...
阅读全文
摘要:经过细测,Cortex-M3的double类型必须4字节对齐访问,其他诸如float,int,short 可以非对齐访问。否则将会产生硬件异常!即访问double类型地址必须能被4整除,测试代码如下: 1: /* 测试Cortex-M3类型对齐访问 2: * i,j,k,l控制对齐长度,对齐 3: * 长度不符合是将产生HardFault ...
阅读全文
摘要:波特率:每秒钟通过信道传输的信息量称为位传输速率,也就是每秒钟传送的二进制位数,简称比特率。比特率表示有效数据的传输速率,用b/s 、bit/s、比特/秒,读作:比特每秒。如9600b/s:指总线上每秒可以传输9600个bit;通常的串口桢格式为:开始位1bit + 数据位8bit + 停止位1bi...
阅读全文
摘要:Keil 下载时出以下错误:Device: STM32F103VB VTarget = 3.300V State of Pins: TCK: 0, TDI: 0, TDO: 1, TMS: 0, TRES: 1, TRST: 1 Hardware-Breakpoints: 6 Software-Breakpoints: 8192 Watchpoints: 4 JTAG speed: 4000 kHz Full Chip Erase Done. Programming Done. Contents missmatch at: 08000E8...
阅读全文
摘要:默认:CANRX – > PA11CANTX - >PA12映射1:CANRX – > PB8CANTX - >PB9映射2:CANRX – > PD0CANTX - >PD1
阅读全文
摘要:可能解决这个问题的方法并不是唯一的,除了此文描述的可能还有其它的解决办法在Keil 下使用Jlink对stm32进行下载固件或是仿真时出现:Cannot enter Debug Mode!解决办法:1、修改JLink固件,但这个似乎不太好解决;2、修改Sigger的动态库版本,使之与Jlink硬件版本一样;从网上下载一上合的版本安装并放到C:\Keil\ARM\Segger另外请确保Jlink的可用的,硬件是连接正确的,Good luck!
阅读全文