一、GPIO
引脚的预配置在syscfg文件里改,改完生成即可,和CUBEMX其实差不多
DL_GPIO_readPins(GPIO_GROUP,GPIO_GROUP_NAME_PIN)//读引脚电平
DL_GPIO_setPins(GPIO_GROUP,GPIO_GROUP_NAME_PIN)//电平置高
DL_GPIO_clearPins(GPIO_GROUP,GPIO_GROUP_NAME_PIN)//电平置低
对于外部中断,将GPIO改为input状态, 在digital那一栏里改为上拉即可
二、Timer
CCS的外设配置与STM32略有不同,简单来说:
①先在syscfg里选好想要的定时器(时钟源一般用BUSCLK即可)
②配置中断
③设置时钟数分频(非必要),预分频系数
④中断的话用zero event即可
//中断配置
NVIC_EnableIRQ(TIMER_x_INST_INT_IRQN);
DL_TimerG_startCounter(TIMER_x_INST);
对于PWM波,直接在syscfg里面对TIM_PWM进行设置即可,只需配置频率&占空比
//PWM波开启
DL_TimerG_startCounter(PWM_0_INST );
三、串口
串口的接收一般会用到中断,需要在syscfg里打开接收中断,baud率一般为115200,也要设定
NVIC_ClearPendingIRQ(UART_x_INST_INT_IRQN);//清除标志位
NVIC_EnableIRQ(UART_x_INST_INT_IRQN);//打开中断
DL_UART_Main_receiveData(UART_x_INST);//串口接收
DL_UART_Main_transmitData(UART_x_INST,variable)//串口发送
void UART_x_INST_IRQHandler(void)//串口中断函数
四、Printf串口重定向
重定向不需要打开串口中断,只要设置好baud等参数即可
注意包括stdio&string库
int fputc(int c,FILE* stream)//用于发送字符串
{
DL_UART_Main_transmitDataBlocking(UART_x_INST,c);
return c;
}
int fputs(const char* restrict s,FILE* restrict stream)//用于发送数字等
{
uint16_t i,len;
len=strlen(s);
for(i=0;i<len;i++)
{
DL_UART_Main_transmitDataBlocking(UART_x_INST,s[i]);
}
return len;
}
int puts(const char *_ptr)
{
int count=fputs(_ptr,stdout);
count+=fputs("\n",stdout);
return count;
}
五、外部中断(电赛用读编码器)
N、一些常用函数的封装
一、ms延时
void delay_ms(uint32_t ms)
{
while(ms--)
delay_cycles(CPUCLK_FREQ/1000)
}
二、PWM占空比修改
void set_duty(float duty,uint8_t channel)
{
uint32_t Comparevalue;
Comparevalue=PWM period count - Pwm period count*value;
DL_TimerG_setCaptureComparevalue(PWM_x_INST,Comparevalue,DL_TIMER_CC_x_INDEX)
//定时器 //Comparevalue值 //对应通道
}
三、PWM频率修改
void set_Freq(uint32_t freq,uint8_t channel)
{
period=PWM_x_INST_CLK/freq;
DL_Timer_setloadValue(PWM_x_INST,period);
}