This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TM4C123GH6PM:使用 Tiva C 的裸机 max6675代码(通过 Keil)

Guru**** 2530880 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/941027/tm4c123gh6pm-baremetal-max6675-code-through-keil-using-texas-tiva-c

器件型号:TM4C123GH6PM
主题中讨论的其他器件:TM4C123

我意识到这是一个用于基于 TI 的编译器的论坛、但我正在尝试使采用 SPI 的 Max6675热电偶发挥作用、但似乎无法实现。 我的所有设置都是正确的、但在接收时、不会发生这种情况、即 SSI1->DR 保持为空、即使所有设置都是正确插入的引脚、并且我以相对较低的时钟速度以10kHz 运行。 下面显示的是代码、是否有人可以提供任何建议?  


#include "TM4C123.h"//器件标头
#include


void SSI1_init (void);
void SSI1_READ_TEMP();
空 Timer0AMsDelay (int delay);


int main(){


SSI1_init();

Timer0AMsDelay (1000);
SSI1_READ_TEMP ();


while (1){}

void SSI1_init (void){

SYSCTl->RCGCSSI |= 0x02;//为 SSI1启用时钟
SYSCTl->RCGCGPIO |= 8;//启用 GPIOD 的时钟
SYSCTl->RCGCGPIO |= 0x20;//启用 GPIOF 时钟

GPIOD->AMSEL &=~0x05;/*禁用这些引脚的模拟*/
GPIOD->DEN |= 0x05;//数字使能 GPIOD、引脚0和引脚2
GPIOD->AFSEL |= 0x05;//备用功能使能 GPIOD、引脚0和引脚2
GPIOD->PCTL &=~0x00000F0F;
GPIOD->PCTL |= 0x00000202;//为 GPIOD 使能 SSI1 SCK、引脚0和为 GPIOD 使能 SSI1 RX、引脚2。 p1351 0010 0000 0010

GPIOF->DEN |= 0x04;//数字使能 GPIOF、引脚2
GPIOF->DIR |= 0x04;//GPIOF、引脚2被设定为输出
GPIOF->PUR |= 0x4;//GPIOF、引脚2被设定为输出
GPIOF->data |= 0x04;//


SSI1->CR1 = 0;//清除使能位以更改参数
SSI1->CC = 0;//
SSI1->CPSR |= 0x20;/*预分频器除以32*/
SSI1->CR0 |= 0x310F;//再将时钟 div 乘以50得到10kHz、SPI 模式主控、
16位数据、CPOL = 0、CPHA = 1 -> 0b 0011 0001 0000 1111 *
SSI1->CR1 |= 0x2;//启用 SSI1 */


void SSI1_READ_TEMP (){
uint16_t data = 0;
GPIOF->data &=~0x04;
while (!(SSI1->SR & 0x8)){}//p974 -等待此处、而接收非空为 true
数据= SSI1->DR;//将数据写入数据寄存器
while (SSI1->SR & 0x10){}//p974 -等待 SSI 忙线
GPIOF->data |=0x04;



空 Timer0AMsDelay (int delay){

sysctl->RCGCTIMER |= 1;
TIMER0->CTL = 0;
TIMER0->CFG = 0x04;
TIMER0->TAMR = 0x02;
TIMER0->TAILR = 16000 - 1;
TIMER0->ICR = 0x1;
TIMER0->CTL = 0x01;

for (int i = 0;i < delay;i++)

while ((TIMER0->RIS & 0x1)=0){}
TIMER0->ICR = 0x1;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Brendan、

    使用 Keil 并不是一个大问题、但我们不支持 TM4C 的直接寄存器代码、如我们的论坛指南4: https://e2e.ti.com/support/microcontrollers/other/f/908/t/695568中所述

    也就是说、您可能在 while 循环中使用了错误标志:

    #define SSI_SR_RFF 0x00000008 // SSI 接收 FIFO 满
    #define SSI_SR_RNE 0x00000004 // SSI 接收 FIFO 不为空 

    查看 DID 与 SSIDataGet TivaWare API 时需要检查的内容。

    您可能希望使用 TivaWare API 来验证您需要如何与器件通信、然后查看源代码以将您的应用程序组合在一起。