STM32模拟串口控制TM1652

前段时间利用STM32单片机普通IO口模拟串口通信控制TM1652让数码管显示。目前没出现什么问题点,此贴仅贴出核心模拟串口通信部分,如有需要,博客里有自己测试时的程序源码,不要C币啦,啊哈哈哈哈。。。如果对你有用,请点赞啊喂

/**********************************************************
函数名称:tm1652_send_data
函数功能:发送11位数据(一帧数据)
函数参数:data :需要发送给TM1652的byte
函数返回:无
函数隶属:display(void)
创建日期:2020/04/19  13:36
作    者:RJ
注    解:1起始位+8位数据位+1校验位+1停止位
**********************************************************/
void tm1652_send_data(u8 sdat)
{
	u8 i=0, sfalg=0;
	  
	TX=0;   							// 起始位
	delay_us(52);   

	for(i=0; i<8; i++)					// 八位数据位
	{
		if(sdat & 0x01)
		{
			TX=1;
			sfalg++;
		}else
		{
			TX=0;
		}
		delay_us(52); 					// 波特率为19200,故每发送一位延时52us
		sdat >>=1;
	}

	if(sfalg%2==0)			    		// 奇校验位     
	{
		TX=1;
	}
	else			        
	{
		TX=0;
	}
	delay_us(52); 
	
	TX=1;  								// 停止位
	delay_us(104);   
}
  • 14
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
控制TM1652,需要使用STM32HAL库中的GPIO和SPI模块。首先需要初始化SPI模块,然后通过SPI发送数据给TM1652控制其显示。 以下是控制TM1652的示例代码: ```c #include "stm32f4xx_hal.h" #define TM1652_CS_Pin GPIO_PIN_0 #define TM1652_CS_GPIO_Port GPIOA #define TM1652_DIN_Pin GPIO_PIN_7 #define TM1652_DIN_GPIO_Port GPIOB #define TM1652_CLK_Pin GPIO_PIN_6 #define TM1652_CLK_GPIO_Port GPIOB SPI_HandleTypeDef hspi1; void TM1652_Init(void) { // 初始化SPI模块 hspi1.Instance = SPI1; hspi1.Init.Mode = SPI_MODE_MASTER; hspi1.Init.Direction = SPI_DIRECTION_2LINES; hspi1.Init.DataSize = SPI_DATASIZE_8BIT; hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; hspi1.Init.NSS = SPI_NSS_SOFT; hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256; hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; hspi1.Init.TIMode = SPI_TIMODE_DISABLE; hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; hspi1.Init.CRCPolynomial = 10; HAL_SPI_Init(&hspi1); // 初始化TM1652 HAL_GPIO_WritePin(TM1652_CS_GPIO_Port, TM1652_CS_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(TM1652_DIN_GPIO_Port, TM1652_DIN_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(TM1652_CLK_GPIO_Port, TM1652_CLK_Pin, GPIO_PIN_SET); } void TM1652_Write(uint8_t addr, uint8_t data) { uint8_t tx_data[2]; tx_data[0] = addr; tx_data[1] = data; HAL_GPIO_WritePin(TM1652_CS_GPIO_Port, TM1652_CS_Pin, GPIO_PIN_RESET); HAL_SPI_Transmit(&hspi1, tx_data, 2, HAL_MAX_DELAY); HAL_GPIO_WritePin(TM1652_CS_GPIO_Port, TM1652_CS_Pin, GPIO_PIN_SET); } int main(void) { HAL_Init(); TM1652_Init(); // 显示数字1 TM1652_Write(0x68, 0x01); while (1) { } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值