基于STM32CUBE MX 的TM1640的使用例程
TM1640是一种LED驱动控制专用电路 内部集成有MCU数字接口(SCLK与DIN)即时钟脉冲引脚与数据输入引脚、数据锁存器、LED驱动电路。因此在使用单片机控制LED点阵或数码管时能减小单片机的资源,本例程将带大家了解TM1640的使用方法即如何编写相关的驱动代码(基于STM32CUBE MX开发工具)。
本例程使用两种延时方法,一种是基于SysTick也就是24位的系统节拍定时器,具有自动重载和溢出中断功能。另一种就是定时器设置TIMx_CNT的值,从而实现精确延时。(如果不认识TIMx_CNT可以问问度娘,有详细的解释,本文不作赘述。)这里需要占用一个定时器。
GPIO使用PB8、PB9模式为推挽输出,这是使用GPIO默认上拉,这部分比较简单,基本点一下即可。
定时器延时与SysTick延时函数
void delay_us(uint16_t us)
{
uint16_t differ=0xffff-us-5;
HAL_TIM_Base_Start(&htim1);
__HAL_TIM_SetCounter(&htim1,differ);
while(differ < 0xffff-5)
{
differ = __HAL_TIM_GetCounter(&htim1);
}
HAL_TIM_Base_Stop(&htim1);
}
void delay_ms(uint16_t nms)
{
uint32_t temp;
SysTick->LOAD = 9000*nms;
SysTick->VAL=0X00;//清空计数器
SysTick->CTRL=0X01;//使能,减到零是无动作,采用外部时钟源
do
{
temp=SysTick->CTRL;//读取当前倒计数值
}while((temp&0x01)&&(!(temp&(1<<16))));//等待时间到达
SysTick->CTRL