4、增加串口接收函数实现
static void UsartRxErrProcess(void)
{
if (Set == USART_GetStatus(BSP_PRINTF_DEVICE, UsartFrameErr))
{
USART_ClearStatus(BSP_PRINTF_DEVICE, UsartFrameErr);
}
if (Set == USART_GetStatus(BSP_PRINTF_DEVICE, UsartParityErr))
{
USART_ClearStatus(BSP_PRINTF_DEVICE, UsartParityErr);
}
if (Set == USART_GetStatus(BSP_PRINTF_DEVICE, UsartOverrunErr))
{
USART_ClearStatus(BSP_PRINTF_DEVICE, UsartOverrunErr);
}
}
char __platform_getchar(){
char res = 0;
while(Set!= USART_GetStatus(BSP_PRINTF_DEVICE, UsartRxNoEmpty)) /* Warit Rx data register no empty */
{
UsartRxErrProcess();
rt_thread_mdelay(10);
};
return (char)USART_RecData(BSP_PRINTF_DEVICE);
}
char rt_hw_console_getchar(void)
{
/* Note: the initial value of ch must < 0 */
int ch = -1;
return __platform_getchar();
}
5、编译运行,使用putty,链接对应的串口,按回车健,控制台切换到下一行
6、在工程文件夹下新建文件夹pikascript,并把pikaPackage.exe 和 requestment.txt复制到目录中。requestment.txt 文件定义了需要的版本号,然后运行exe
7、在工程中添加相应的目录
8、在目录中添加文件
pikascript的core和lib目录中所有文件添加到相应目录
9、接下来编写 pikascript 运行的 python 脚本,我们在 pikascript 文件夹新建一个 main.py 文件。
然后写入:
import PikaStdLib
print('hello PikaScript!')
其中import PikaStdLib
表示导入标准库,标准库是必须要导入的,即使没有直接用到,而print('hello PikaScript!')
用于测试pikascript是否正常启动。
10、 接下来运行 rust-msc-latest-win10.exe,将 main.py 和导入的模块预编译为 pikascript 的 api 文件,预编译后的文件在 pikascript-api 文件夹内。
我们打开 pikascript-api 文件夹,发现里面有一些 .c 和 .h 文件,就说明预编译是成功的,pikascript 预编译器可以把 python 模块预编译为 .c 和 .h 文件。
11、pikascript-api目录中添加目录下的源文件
12、调整引用目录
13、调整堆栈
打开工程的启动文件, 在 stm32 中, 这是一个 startup_stm32xxxx.s 的文件,而在其他平台上,你要自己弄清楚如何调整堆栈。
建议分配 4K 的栈空间和 16K 的堆空间,最少也需要分配 1K 的栈空间和 4K 的堆空间
4K 栈空间对应 0x1000, 16K 堆空间对应 0x4000,如下图所示
14、添加控制台的pika启动入口
PikaObj *pikaMain = 0;
uint8_t pika_is_inited = 0;
static void pikascript_rt_init(void *parameter){
rt_kprintf("------------------------------------------------------------------\r\n");
rt_kprintf("| |\r\n");
rt_kprintf("| ____ _ __ _____ _ __ |\r\n");
rt_kprintf("| / __ \\ (_) / /__ ____ _ / ___/ _____ _____ (_) ____ / /_ |\r\n");
rt_kprintf("| / /_/ // / / //_// __ `/ \\__ \\ / ___// ___// / / __ \\ / __/ |\r\n");
rt_kprintf("| / ____// / / ,< / /_/ / ___/ // /__ / / / / / /_/ // /_ |\r\n");
rt_kprintf("| /_/ /_/ /_/|_| \\__,_/ /____/ \\___//_/ /_/ / .___/ \\__/ |\r\n");
rt_kprintf("| /_/ |\r\n");
rt_kprintf("| PikaScript - An Ultra Lightweight Python Engine |\r\n");
rt_kprintf("| |\r\n");
rt_kprintf("| [ https://github.com/pikastech/pikascript ] |\r\n");
rt_kprintf("| [ https://gitee.com/lyon1998/pikascript ] |\r\n");
rt_kprintf("| |\r\n");
rt_kprintf("------------------------------------------------------------------\r\n");
pikaMain = pikaScriptInit();
pika_is_inited = 1;
}
static void pikascript_entry(void *parameter){
if(!pika_is_inited){
pikascript_rt_init(NULL);
}
pikaScriptShell(pikaMain);
}
static int pika_main(int argc, char *argv[]){
pikascript_entry(NULL);
return 0;
}
MSH_CMD_EXPORT_ALIAS(pika_main, pika, run PikaScript);
15、编译运行,在控制台输入pika按回车
修改宏定义增加finsh的栈空间 不然很容易溢出, #define FINSH_THREAD_STACK_SIZE 4096
串口传输用中断实现的话,要频繁的进入中断函数,这样无疑增加MCU的负担,干扰正常程序的运行,对于一些实时性强的应用,如数字显示应用中,液晶屏显示可能受影响而不能正常显示。用DMA实现串口收发数据,进行数据收发过程中,不需要MCU的干预,由DMA独立完成数据的收发,接收或者发送完成后才进入中断做后续处理,因此MCU使用效率更高。
华大提供的例程中,对于串口DMA收发的应用比较简单,我这里结合以前的经验将串口收发用DMA实现。
使用华大免费提供的DEMO板D的基础上实现,MCU型号是HC32F460,当前例程使
这里分享嵌入式领域有用有趣的项目/工具以及一些热点新闻,农历年分二十四节气,希望在每个交节之日准时发布一期。
本期刊是开源项目(GitHub: JayHeng/pzh-mcu-bi-weekly),欢迎提交 issue,投稿或推荐你知道的嵌入式那些事儿。
上期回顾 :《痞子衡嵌入式半月刊: 第 45 期》
下周二是冬至,历史上的今天:1959年12月...
### 回答1:
hc32f460库函数开发手册是用于hc32f460芯片的库函数开发的指南。hc32f460是一款32位高性能微控制器,它的库函数开发手册提供了针对该芯片的各种库函数的详细说明和使用方法。
该手册包含了hc32f460的各个功能模块的库函数,包括IO口、ADC、UART、SPI、I2C、定时器、中断控制器等等。对于每个库函数,手册提供了函数原型、参数说明、返回值等详细的描述,以及示例代码和应用场景。
通过阅读hc32f460库函数开发手册,开发人员可以了解到如何使用库函数来实现各种功能。例如,如果想要配置一个IO口的输入输出方向和电平状态,可以通过查找手册中GPIO模块的库函数相关信息来完成。如果想要使用定时器来实现定时中断功能,同样可以通过手册中定时器模块的库函数相关信息来完成。
在进行hc32f460库函数开发时,手册可以作为开发人员的重要参考资料。它可以帮助开发人员正确使用库函数,提高开发效率,减少开发错误。同时,手册还包含了大量的示例代码和应用场景,对于初学者来说,可以通过这些示例代码更好地理解库函数的使用方法。
总的来说,hc32f460库函数开发手册是一本对于hc32f460微控制器库函数开发非常有帮助的指南,它提供了详细的库函数说明和示例代码,帮助开发人员快速掌握并使用hc32f460的库函数,从而实现各种功能。
### 回答2:
HC32F460库函数开发手册是一本详细介绍HC32F460系列微控制器库函数的手册。HC32F460是一款32位高性能微控制器,集成了丰富的外设模块和强大的处理能力,适用于工业控制、汽车电子、消费电子等领域。
该开发手册首先介绍了HC32F460系列微控制器的硬件架构和特性,包括芯片封装、内部外设、主频和存储器等方面的详细说明。接着,手册针对各个外设模块,如GPIO、定时器、串口等,详细介绍了每个模块的主要功能、寄存器的配置方法和实现技巧,并给出了相应的示例代码。
手册还详细介绍了HC32F460库函数的使用方法和注意事项。库函数是封装了芯片底层硬件操作的一种高级编程接口,可以极大地简化开发者的程序编写工作。该手册通过详细的代码说明和示例,指导开发者如何正确地使用库函数进行驱动开发和应用程序编写。
此外,手册还包含了HC32F460系列微控制器的软件开发环境的配置和使用方法,包括编译器、调试器和编程器的设置和使用。通过阅读该手册,开发者可以全面理解HC32F460系列微控制器的功能和使用方法,从而更高效地进行开发工作。
总之,HC32F460库函数开发手册是HC32F460系列微控制器开发的重要参考资料,通过阅读和理解手册内容,开发者可以掌握HC32F460的硬件和软件开发技术,进而进行高效、可靠的嵌入式应用程序开发。
### 回答3:
HC32F460是华大基于ARM Cortex-M4内核的一款32位微控制器芯片系列。开发手册是华大提供给开发者的一份重要文档,其中包含了HC32F460系列芯片的库函数开发指南和详细资料。
HC32F460库函数开发手册是为了帮助开发者更好地使用和了解这款芯片的库函数而编写的。库函数是一组事先编写好的代码库,集成了各种功能和功能模块的函数接口,有助于开发者快速开发应用程序。
开发手册详细介绍了HC32F460系列芯片的库函数的使用方法和功能特点,通过详细的函数说明和示例代码,开发者可以了解不同功能模块的库函数调用方法和参数设置。开发手册还提供了丰富的应用场景案例,帮助开发者理解不同函数在实际应用中的作用和用法。
在开发手册中,开发者可以学习到如何初始化芯片和外设、如何访问芯片的不同寄存器和功能模块、如何使用中断和定时器等功能、如何与外部设备进行通信等。手册还提供了详细的时序图和电路框图,帮助开发者更好地理解和设计应用电路。
总之,HC32F460库函数开发手册对于开发者来说是一份不可或缺的工具,它提供了详细的指导和参考资料,帮助开发者快速上手和开发应用程序。通过学习和使用开发手册,开发者可以充分发挥HC32F460芯片的功能和性能,实现更高效、可靠的应用开发。
Programming Done.
Contents mismatch at: 0000001CH (Flash=BEH Required=00H) !
Contents mismatch at: 0000001DH (Flash=F4H Required=00H) !
Contents mismatch at: 0000001EH (Flash=FFH Required=00H) !
Contents mismatch at: 0000001FH (Flash=EFH Required=00H) !
Verify Failed!
Error: Flash Download failed - “Cortex-M3”
把上面这样贴出来,是为了别人在编译器里把build output的内容复制上来后直接搜索使用的。
解决方法一
1/修改startup_lpc17XX.s文件
把***66行 ***的内容改成FLASH的内容就好了也就前面报出来的
Contents mismatch at: 0000001CH (Flash=BEH Required=00H) !
Contents mismatch at: 0000001DH (Flash=F4H Required=00H) !
Contents mismatch at: 0000001EH (Flash=FFH Required=00H) !
Contents mismatch at: 0000001FH (Flash=EFH Required=00H) !
就是0xeffff4be
改成这个样子
这样子就可以快速解决问题了,可是不能根本上弄清问题。
第二种方法就是修改FLM校验文件
这个头文件的位置是:***…\Keil\LPC1700_DFP\2.5.0\Flash/LPC_IAP_128.FLM***
在这个文件夹下有 flash校验的源文件
把363行去掉就好的了,不会去校验0x1c的位置了
接下来就是把FLM文件生成就好了。
点解编译,编译完会执行一个命令
生成的文件名子在这里改
在创建之前要修改这两个宏定义才可以
因为程序内部要使用的。
注:可能源文件不能编辑,如下图
有个钥匙的不能修改,