本帖最后由 qjp1988113 于 2020-8-6 11:48 编辑
IDE 开发环境配置好了,下面就开始用MCC,配置生成一些建议的代码吧。貌似好像现在各大厂商
都流行这种配置工具了,搞的时间久了,底层都不知道在哪了。
新建一个工程,打开MCC,如下图配置:
或者
配置引脚功能直接在芯片模型上选择对应引脚,右键选择即可:
设置好后,会自动生成如下界面,这里你也可以修改下参数,加下
自己的标签等。
添加外设模块,可以在2个地方添加:
添加后,会跳到新生成外设的配置界面。
具体如下:
配置好后:点击左边的生成:
在打开工程,文件就全有了。
代码生成后,我们只要把自己的代码添加进去就行了。
设定的场景为:定时器为1s中断一次,其中LED在中断中翻转状态。同时添加一个变量
基于1S的定时器,做一个1S的延时函数。主函数中,每隔5S打印一次“Hello world!”
在生成的定时器函数 tca0.c和tca0.h里面修改:
在tca0.c找到中断的回调函数,直接修改:
volatile uint32_t Send**=0;
void TCA0_DefaultOVFIsrCallback(void)
{
//Add your ISR code here
LED_Toggle();
if(Send**>0)
{
Send**--;
//printf("the Send** now is %d!\r\n",Send**);
}
}
在tca0.h添加变量的外部调用:extern volatile uint32_t Send**;
LED_Toggle()的具体定义就在pin_manager.h,就是控制LED引脚
PC6状态取反:
#define LED_Toggle() do { PORTC_OUTTGL = 0x40; } while(0)
在main.c 里面添加自定义的延时函数:
void delays(uint32_t s)
{
uint32_t old**=0;
uint32_t New**=0;
Send**=s;
while(Send**)
{
/*
old**=New**;
New**=Send**;
if(old**!=New**)
{
printf("the Send** now is %d!\r\n",Send**);
}
*/
}
//printf("the senprintfd** now is break!\r\n");
}
int main(void)
{
/* Initializes MCU, drivers and middleware */
SYSTEM_Initialize();
printf("Hello world!\r\n");
//Send**=20;
/* Replace with your application code */
while (1){
/*
if(Send**>0)
{
printf("the send** now is %d!\r\n",Send**);
_delay_ms(500);
}*/
printf("Hello world!\r\n");
delays(5);
//_delay_ms(500)
}
}
编译下载:
LED 1s交替闪烁 串口5S一次输出“Hello world!”.
是不是看起来很简单。
其中出现了一次坑,就是编译器优化所致。我对变量volatile uint32_t Send**,一开始未加“volatile”
修饰字,结果串口每次输出一边就死循环在延时函数里面了。
|